2012-11-04 20 views
5

हाय लोग सिर्फ यह पूछना चाहते थे कि मैं स्ट्रिंग का अंतिम अक्षर कैसे प्राप्त कर सकता हूं और जांच कर सकता हूं कि यह स्वर या व्यंजन है या नहीं। जिस तरह से मैं ओरेकल 10 जी का उपयोग कर रहा हूँ। उन लोगों के लिए धन्यवाद जो मेरी मदद करेंगे। शांति! अबस्ट्रिंग के अंतिम अक्षर को कैसे प्राप्त करें

SELECT last_name, 
     Substr(last_name, -1, 1) "Last letter", 
     Substr(last_name, 1, 1) "First letter", 
     CASE 
     WHEN Substr(last_name, -1, 1) IN ('a', 'e', 'i', 'o', 'u') THEN 
     'ends with a vowel' 
     WHEN Substr(last_name, -1, 1) IN ('b', 'c', 'd', 'f', 
              'g', 'h', 'j', 'k', 
              'l', 'm', 'n', 'p', 
              'q', 'r', 's', 't', 
              'v', 'w', 'x', 'y', 'z') THEN 
     'ends with a consonant' 
     END      "Last Letter Description", 
     CASE 
     WHEN Substr(last_name, 1, 1) IN ('a', 'e', 'i', 'o', 'u') THEN 
     'starts with a consonant' 
     WHEN Substr(last_name, 1, 1) IN ('b', 'c', 'd', 'f', 
              'g', 'h', 'j', 'k', 
              'l', 'm', 'n', 'p', 
              'q', 'r', 's', 't', 
              'v', 'w', 'x', 'y', 'z') THEN 
     'starts with a consonant' 
     END      "First Letter Description" 
FROM employees 
GROUP BY first_name, 
      last_name 

जब आप 10g "सबसे पहले पत्र विवरण" दैवज्ञ पर इस पर अमल खाली है:

यहाँ क्या मैं पहले से ही के साथ आया है! कृपया मेरी मदद करें मेरे कोड के साथ क्या गलत लगता है?

+0

चेक ऑरैक फ़ंक्शन सबस्ट्र और रेगेक्सपी –

+0

एसक्यूएल में? PL/SQL? क्या आप एक बूलियन परिणाम की उम्मीद करते हैं? क्या होगा यदि अंतिम पत्र 'वाई' है? – Wolf

+0

मैं इसे ओरेकल –

उत्तर

9

यह पूरा नहीं की कोशिश करो, है, लेकिन आसान समायोजन के साथ आप इसे जिस तरह से आप चाहते हैं काम कर सकते हैं: अपने डेटा पर

FUNCTION last_is_vowel (string_in VARCHAR2) 
    RETURN BOOLEAN 
IS 
BEGIN 
    RETURN CASE WHEN LOWER(SUBSTR(string_in, -1)) IN ('a', 'e', 'i', 'o', 'u') 
       THEN TRUE 
       ELSE FALSE 
      END; 
END last_is_vowel; 
+0

में करने की कोशिश कर रहा हूं क्या आप इसे आसान बना सकते हैं? मुझे कर्मचारियों की मेज से डेटा पुनर्प्राप्त करने की आवश्यकता है, इसलिए यह मेरे लिए थोड़ा जटिल है। –

+2

@DwayneRadar मुझे यकीन नहीं है कि आप एक ही केस स्टेटमेंट से कितना आसान हो सकते हैं ... –

+0

मैं एलसी से सहमत हूं। मैं इसे उससे ज्यादा सरल नहीं बना सकता। यह फ़ंक्शन स्ट्रिंग के अंतिम वर्ण का परीक्षण करता है और चेक करता है कि यह 'ए', 'ई', 'i', 'o' या 'u' है या नहीं। यदि आप इसे SQL में उपयोग करना चाहते हैं तो आपको इस फ़ंक्शन पर एक रैपर बनाना होगा। –

3

देखो। कर्मचारियों में पहला अक्षर संभावना है .last_name पूंजीकृत है। याद रखें, ओरेकल केस संवेदनशील है। आप अपने मैच को खोजने में मदद के लिए उपयोगकर्ता UPPER() या LOWER() कर सकते हैं।

यह भी स्वरों के लिए खोज करने के लिए और अधिक उपयोगी होगा और जोओओ के सुझाव के रूप में बहिष्करण खोजने के लिए एक और कथन का उपयोग करें।

SELECT last_name, 
     Substr(last_name, -1, 1) "Last character", 
     Substr(last_name, 1, 1) "First character", 
     CASE 
     WHEN lower(Substr(last_name, -1, 1)) IN ('a', 'e', 'i', 'o', 'u') THEN 
     'ends with a vowel' 
     ELSE 
     'does not end with a vowel' 
     END      "Last Letter Description", 
     CASE 
     WHEN lower(Substr(last_name, 1, 1)) IN ('a', 'e', 'i', 'o', 'u') THEN 
     'starts with a vowel' 
     ELSE 
     'does not start with a vowel' 
     END      "First Letter Description" 
FROM employees 
GROUP BY first_name, 
      last_name 
संबंधित मुद्दे