[英]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.