簡體   English   中英

在 Oracle SQL 中將 CASE 表達式的結果轉換為數字

[英]Convert result of CASE Expression to a number in Oracle SQL

我有以下select查詢。 我想它從string轉換為number 如果我在 case 表達式周圍包裹一個TO_NUMBER ,我會得到

表達式必須與相應的表達式具有相同的數據類型

錯誤

SELECT CASE SUBSTR(GRADE, INSTR(GRADE, ' ') + 1) 
         WHEN 'Unspecified' THEN ' '
         ELSE SUBSTR(GRADE, INSTR(GRADE, ' ') + 1) 
       END as Final_Grade,

我怎樣才能讓Final_Grade成為numeric

謝謝!

嗯, ' '不是數字,所以最好弄清楚該怎么做。 我建議NULL

SELECT (CASE SUBSTR(GRADE, INSTR(GRADE, ' ') + 1) 
           WHEN 'Unspecified' THEN NULL
           ELSE TO_NUMBER(SUBSTR(GRADE, INSTR(GRADE, ' ') + 1)) 
        END) as Final_Grade,

其實我更喜歡:

(CASE WHEN GRADE NOT LIKE 'Unspecified%'
      THEN TO_NUMBER(SUBSTR(GRADE, INSTR(GRADE, ' ') + 1)) 
 END) as Final_Grade

或者也許更安全:

(CASE WHEN REGEXP_LIKE(GRADE, '^[0-9]+ ')
      THEN TO_NUMBER(SUBSTR(GRADE, INSTR(GRADE, ' ') + 1)) 
 END) as Final_Grade

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM