我有一个类似“ABC3245-bG1353BcvG34”的字符串。我需要去掉连字符,包括连字符后的所有字母。
所以上面的字符串应该是ABC3245135334
我尝试了下面的代码:

select substring('ABC3245-bG1353BcvG34' from 1 for (position('-' in 'ABC3245-bG1353BcvG34')-1))||regexp_replace(substring('ABC3245-bG1353BcvG34' from (position('-' in 'ABC3245-bG1353BcvG34') +1) for length('ABC3245-bG1353BcvG34')),'[a-zA-Z]','')

但不能去掉连字符后的字母。

最佳答案

我需要去掉连字符,包括连字符后的所有字母。
所以上面的字符串(ABC3245-bG1353BcvG34)应该是ABC3245135334
这意味着所有数字都应该保留在连字符之后(按其原始顺序)。如果这是你想要的,你不能用一个正则表达式来实现。假设输入中只能有一个连字符:

SELECT substring(input.value from '^[^-]*') ||
       regexp_replace(substring(input.value from '[^-]*$'), '\D+', '', 'g')
FROM (SELECT 'ABC3245-bG1353BcvG34'::text AS value) AS input

如果输入中可以有多个连字符,请定义如何处理连字符之间的字符。

10-07 14:28