أوراكل - حدد الحقل حيث تحتوي على أحرف صغيرة
-
11-07-2019 - |
سؤال
ولدي جدول، المستخدمين، في قاعدة بيانات Oracle 9.2.0.6. اثنين من الحقول VARCHAR - LAST_NAME وFIRST_NAME
.وعندما يتم إدراج الصفوف في هذا الجدول، من المفترض حقول الاسم الأول واسم العائلة ليكون في كل حالة العلوي، ولكن ما بعض القيم في هذين المجالين ومختلطة القضية.
وأريد أن تشغيل استعلام التي سوف تظهر لي كافة الصفوف في الجدول التي لها أسماء الأولى أو الأخيرة مع أحرف صغيرة في ذلك.
ولقد بحثت في النت وجدت REGEXP_LIKE، ولكن هذا يجب أن يكون لإصدارات أحدث من أوراكل - لا يبدو أن العمل بالنسبة لي
.وشيء آخر حاولت كان لترجمة "ABCDE ... ض" إلى "$$$$$ ... $"، ثم بحث عن '$' في مجال عملي، ولكن يجب أن يكون هناك طريقة أفضل؟
ويرجع الفضل في ذلك مسبقا!
المحلول
وماذا عن هذا:
select id, first, last from mytable
where first != upper(first) or last != upper(last);
نصائح أخرى
وأعتقد أن SQL BQ وSQL الثاني جستن يعمل، لأن في هذا السيناريو:
first_name last_name
---------- ---------
bob johnson
Bob Johnson
BOB JOHNSON
وأريد الاستعلام لي للعودة الصفوف الأولى 2.
وأريد فقط للتأكد من أن هذا سيكون استعلام كفاءة على الرغم - مائدتي لديه 500 مليون الصفوف في ذلك
.وعندما تقول العلوي (FIRST_NAME)! = FIRST_NAME، هو "FIRST_NAME" تتعلق دائما إلى الصف الحالي الذي أوراكل تبحث في؟ كنت أخشى أن استخدام هذه الطريقة في البداية لأنني كنت أخشى أن ينتهي الانضمام إلى هذا الجدول لنفسها، لكنها الطريقة التي على حد سواء كتب SQL يبدو أن الاختيار المساواة تعمل إلا على أساس صف على حدة الصف، والتي ستعمل بالنسبة لي.
إذا كنت تبحث عن أوراكل 10g أو أعلى يمكنك استخدامها في المثال التالي. نعتبر أن كنت بحاجة لمعرفة الصفوف حيث أي من حرف في عمود غير صغيرة.
Column1
.......
MISS
miss
MiSS
في المثال أعلاه، إذا كنت بحاجة إلى العثور على miss
القيم وMiSS
، ثم هل يمكن استخدام الاستعلام أدناه
SELECT * FROM YOU_TABLE WHERE REGEXP_LIKE(COLUMN1,'[a-z]');
SELECT *
FROM mytable
WHERE FIRST_NAME IN (SELECT FIRST_NAME
FROM MY_TABLE
MINUS
SELECT UPPER(FIRST_NAME)
FROM MY_TABLE )
وجرب هذا:
SELECT * FROM YOU_TABLE WHERE REGEXP_LIKE(COLUMN1,'[a-z]','c'); => Miss, miss lower text
SELECT * FROM YOU_TABLE WHERE REGEXP_LIKE(COLUMN1,'[A-Z]','c'); => Miss, MISS upper text
ولخادم SQL حيث الإعداد الترتيب DB هو حالة استخدام غير مكترثة بما يلي:
SELECT * FROM tbl_user WHERE LEFT(username,1) COLLATE Latin1_General_CS_AI <> UPPER(LEFT(username,1))