我有一个表,其中的城市列具有很少的记录,状态值也用逗号分隔。
还有其他记录。我想将当前值的状态值带到一个名为state
的单独字段中。
怎么做?我尝试了下面的代码,它说“缺少右括号”:
SELECT DECODE(ORA_CITY,
INSTR(ORA_CITY,',') > 0,
SUBSTR(ORA_CITY, INSTR(ORA_CITY, ','), LENGTH(ORA_CITY) ) ,
NULL) AS STATE
from ADDRESS
答案 0 :(得分:2)
我不知道你是否仍然需要它,但使用CASE:
SELECT CASE
WHEN INSTR(ORA_CITY, '5') > 0 THEN
SUBSTR(ORA_CITY, INSTR(ORA_CITY, '5'), LENGTH(ORA_CITY))
ELSE
NULL
END STATE
FROM ADDRESS
答案 1 :(得分:0)
显然你还没有理解解码语法。
尝试以下方法:
SELECT DECODE(INSTR(ORA_CITY,','),
0,
NULL,
SUBSTR(ORA_CITY, INSTR(ORA_CITY, ','), LENGTH(ORA_CITY) )) AS STATE
FROM ADDRESS
正确的语法是:
DECODE(表达,搜索,结果[,搜索,结果] ...... [, 默认]),其中
表达式是要比较的值。
搜索是与表达式进行比较的值。
结果是返回的值,如果表达式等于搜索。
默认是可选的。如果未找到匹配项,则DECODE函数将执行 返回默认值。如果省略default,那么DECODE函数将会 返回null(如果未找到匹配项)。
答案 2 :(得分:0)
SELECT REGEX_REPLACE(ORA_CITY, '.*, *', '') AS STATE
FROM ADDRESS
WHERE ORA_CITY LIKE '%,%'
这使用正则表达式替换所有逗号,然后可能没有任何空格。包括在哪里。