2016-11-28 36 views
0

我在Postgresql中有一個測試表。它有一個字段value_exist,它是一個字符串,但其中包含字母數字值和數據中的一些特殊字符。我想忽略其中的字符[/ alpha /?/ $/encoding /。],並檢查記錄是否只有數字。如果只有它的唯一數字,那麼我們只需要其他字母數字我們需要null。請參考下面的例子:從數字記錄中提取數字並將null傳遞給Postgresql中的字母數字

enter image description here
我嘗試下面的代碼,但它並沒有給我想要的輸出:

SELECT CASE WHEN value_exist ~ '^([$?\\*+-][0-9]|[0-9][$?\\*+-]|[0-9][0-9])$' 
       THEN REGEXP_REPLACE(value_exist, '[$?\\*+-]', '', 'g') 
       ELSE NULL END value_new 
    FROM test_table 
+0

只需要準確NUMERICS即從0-9號的記錄,其餘全部(特殊字符/字母)作爲空過去了。 – user1538020

+0

請說明問題。什麼是[/ alpha /?/ $/encoding /。]?整數或浮點數?有或沒有標誌?在正確理解中,結果只能是數字或'NULL'? –

+0

alpha - 字母,$ - 特殊字符,編碼可以是表中的任何字符。我嘗試了下面,它適用於字母數字︰SELECT(case'kk9'〜'([AZ AZ])'then null else 77 end)K.但是我想檢查「$ 99 $」 - 這應該給我null,但它沒有給我null。所以,對於$而言它無法處理它。 – user1538020

回答

0

我試用了這個作品。它只需數如果我們得到除數字之外的其他數字,則它將它作爲空值傳遞。

select case when 'H44$'~'^[0-9]*$' then 88 
else null end ---- Result -> null 

select case when '44'~'^[0-9]*$' then 88 
else null end ---- Result -> 44 
0
SELECT nullif(
      regexp_replace(
      value_exist, 
      E'^.*[^\\d].*$', 
      'x'), 
      'x') 
FROM test_table; 
+0

以上沒有工作:( – user1538020

+0

請解釋*沒有工作*。 –

+0

SELECT nullif REGEXP_REPLACE( '44', '^ * [^ \ d] * $。', ''), 'G'); FROM TEST_TABLE; - >這使我空 – user1538020