2012-11-04 79 views
5

Xin chào các bạn chỉ muốn hỏi làm thế nào tôi có thể nhận được chữ cái cuối cùng của một chuỗi và kiểm tra xem đó là nguyên âm hoặc phụ âm. bằng cách Im sử dụng oracle 10g. cảm ơn vì những người sẽ giúp tôi. peacE!Cách lấy chữ cái cuối cùng của một chuỗi

đây là những gì tôi đã đưa ra đã:

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 

bây giờ khi bạn thực hiện điều này trên oracle 10g "First Letter Mô tả" là trống rỗng! Xin hãy giúp tôi làm gì với mã của tôi?

+0

kiểm tra hàm oracle substr và regexp –

+0

Trong SQL? PL/SQL? Bạn có mong đợi một kết quả boolean? Nếu lá thư cuối cùng là 'Y' thì sao? – Wolf

+0

Tôi đang cố gắng làm điều đó trong oracle –

Trả lời

9

Hãy thử điều này, chưa hoàn chỉnh, nhưng với điều chỉnh dễ dàng, bạn có thể làm cho nó hoạt động theo cách bạn muốn:

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

bạn có thể làm điều này đơn giản hơn không? Tôi cần lấy dữ liệu từ bảng nhân viên để điều này phức tạp hơn một chút đối với tôi. –

+2

@DwayneRadar Tôi không chắc bạn đơn giản hơn bao nhiêu so với một tuyên bố CASE đơn lẻ ... –

+0

Tôi đồng ý với lc. Tôi không thể làm cho nó đơn giản hơn thế nhiều. Chức năng này kiểm tra ký tự cuối cùng của chuỗi và kiểm tra nếu nó là 'a', 'e', ​​'i', 'o' hoặc 'u'. Bạn phải xây dựng trình bao bọc trên hàm này nếu bạn muốn sử dụng nó trong SQL. –

3

Nhìn vào dữ liệu của bạn. Cơ hội là nhân vật đầu tiên trong employees.last_name được viết hoa. Hãy nhớ rằng, Oracle phân biệt chữ hoa chữ thường. Bạn có thể sử dụng UPPER() hoặc LOWER() để giúp tìm kết quả phù hợp của bạn.

Cũng sẽ hiệu quả hơn khi chỉ tìm kiếm nguyên âm và sử dụng câu lệnh khác để tìm loại trừ như João gợi ý.

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 
Các vấn đề liên quan