2012-08-23 23 views
9

मैंने शुरू में सोचा कि यह छोटा है। फिर सोचा कि 'बाइनरी' ऐसा कर सकता है। मैं इस बिंदु पर अनिश्चित हूँ।एक MySQL तालिका में सभी ऊपरी केस स्ट्रिंग्स को कैसे ढूंढें?

Name 
---- 
John 
MARY 
Kin 
TED 

मैं सिर्फ मैरी और टेड से पूछताछ करना चाहता हूं जो सभी ऊपरी मामले में हैं। मैं यह कैसे पूछूंगा?

उत्तर

34

यदि आपका मिलान मामले असंवेदनशील है तो आप एक BINARY तुलना उपयोग करने की आवश्यकता नीचे:

SELECT name FROM table WHERE name = BINARY UPPER(column_name); 
+0

बाइनरी यहाँ कुंजी है! धन्यवाद! – ThinkCode

6

तुम बस Name के मूल मूल्य के साथ Name मैदान पर UPPER() फ़ंक्शन का उपयोग करें और परिणामों की तुलना:

select Name from Table where Name = UPPER(Name) 

इस तरह

UPPER(Name) || Name 
--------------------------------------- 
JOHN   != John 
MARY   == MARY 
KIN   != Kin 
TED   == TED 

केवल आवश्यक पंक्तियों लौटा दी जाएगी।

जैसा कि @mdoyle ने यहां टिप्पणी की है, आपको कॉलम को सही संयोजन (केस संवेदनशील) के साथ परिभाषित करना चाहिए, अन्यथा जैसा कि अन्य लोगों ने जवाब दिया है, आपको केस असंवेदनशील कॉलम की तुलना करने के लिए BINARY ऑपरेटर की आवश्यकता है।

+2

संयोजन और डेटा प्रकार पर निर्भर करता है। यदि डेटा प्रकार गैर-बाइनरी है और संयोजन है, उदाहरण के लिए, लैटिन 1, स्ट्रिंग तुलना केस असंवेदनशील होगी। तो मेरा मानना ​​है कि मार्क बेयर्स का जवाब अब तक का सबसे सटीक है। इस मामले में – mdoyle

+0

बाइनरी आवश्यक है (कम से कम मेरे मामले)। अभी भी जानकारी के लिए upvoting। – ThinkCode

2

इस प्रयास करें:

select name from table where name=upper(name); 
+1

यह केवल बाइनरी डेटा प्रकार या सही संयोजन के साथ काम करता है। – Tom

0

यह भी संख्यात्मक मान वापस आ जाएगी, लेकिन यह does not देखो अपने स्तंभ नाम के लिए एक मुद्दा हो सकता है।

SELECT * 
FROM yourtable 
WHERE Name = BINARY UPPER(Name) 

यह ऑनलाइन काम कर देखें::

SELECT Name 
FROM table 
WHERE Name COLLATE latin1_general_cs LIKE UPPER(Name) 
; 
+0

यह केवल बाइनरी डेटा प्रकार या सही संयोजन के साथ काम करता है। – Tom

1

इस प्रयास करें

SELECT * FROM names WHERE 

ASCII(name) = ASCII(Upper(name))