从数字记录中提取数字并将null传递给Postgresql中的字母数字
我在Postgresql中有一个测试表。它有一个字段value_exist,它是一个字符串,但其中包含字母数字值和数据中的一些特殊字符。我想忽略其中的字符[/ alpha /?/ $/encoding /。],并检查记录是否只有数字。如果只有它的唯一数字,那么我们只需要其他字母数字我们需要null。请参考下面的例子:从数字记录中提取数字并将null传递给Postgresql中的字母数字
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
我试用了这个作品。它只需数如果我们得到除数字之外的其他数字,则它将它作为空值传递。
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
SELECT nullif(
regexp_replace(
value_exist,
E'^.*[^\\d].*$',
'x'),
'x')
FROM test_table;
以上没有工作:( – user1538020
请解释*没有工作*。 –
SELECT nullif REGEXP_REPLACE( '44', '^ * [^ \ d] * $。', ''), 'G'); FROM TEST_TABLE; - >这使我空 – user1538020
只需要准确NUMERICS即从0-9号的记录,其余全部(特殊字符/字母)作为空过去了。 – user1538020
请说明问题。什么是[/ alpha /?/ $/encoding /。]?整数或浮点数?有或没有标志?在正确理解中,结果只能是数字或'NULL'? –
alpha - 字母,$ - 特殊字符,编码可以是表中的任何字符。我尝试了下面,它适用于字母数字︰SELECT(case'kk9'〜'([AZ AZ])'then null else 77 end)K.但是我想检查“$ 99 $” - 这应该给我null,但它没有给我null。所以,对于$而言它无法处理它。 – user1538020