2016-11-28 32 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