2014-04-01 21 views
0

我有一個表格,其中有很少記錄的城市列狀態值以逗號分隔。 還有其他記錄,以及。我想將目前的狀態值存入一個名爲state的單獨字段中。 如何做到這一點?我試過下面的代碼,它說「缺少右括號」:用SUBSTRING和INSTRING解碼?

SELECT DECODE(ORA_CITY, 
       INSTR(ORA_CITY,',') > 0, 
        SUBSTR(ORA_CITY, INSTR(ORA_CITY, ','), LENGTH(ORA_CITY)) , 
        NULL) AS STATE 
from ADDRESS 
+0

這將有助於「之前」和「之後」的數據顯示一個例子或兩個的。標準的雙字符代碼是嵌入城市的州嗎? –

+1

'SELECT regexp_substr(ORA_CITY,',(。*)$',1,1,'',1)ASSTATE from ADDRESS' –

回答

0

顯然你還沒有理解解碼語法。

嘗試以下方法:

SELECT DECODE(INSTR(ORA_CITY,','), 
       0, 
       NULL, 
       SUBSTR(ORA_CITY, INSTR(ORA_CITY, ','), LENGTH(ORA_CITY))) AS STATE 
FROM ADDRESS 

正確的語法是:

DECODE(表達,搜索,導致[,搜索,結果] ... [, 默認])其中,

表達式是要比較的值。

搜索是與表達式進行比較的值。

結果是返回值,如果表達式等於搜索。

默認爲可選項。如果未找到匹配項,則DECODE功能將返回默認值 。如果省略默認值,那麼DECODE功能將 返回null(如果找不到匹配項)。

例子herehere

0
SELECT REGEX_REPLACE(ORA_CITY, '.*, *', '') AS STATE 
FROM ADDRESS 
WHERE ORA_CITY LIKE '%,%' 

它使用正則表達式替換所有的高達逗號,然後也許什麼也沒有的空間。包括一個地點。

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