oracle 将字符串中的数字提取到新列中

ctehm74n  于 2023-01-20  发布在  Oracle
关注(0)|答案(2)|浏览(157)

我试图从另一列(x)创建一个新列(y)-我的目标是从字符串的右边第一个空格后提取数值,如果空格后没有数值,则为NULL。然而,查询将空格后的数字和非数字都提取到了新列(y)中-请参见下面的第一张图片。我也尝试使用case语句,但尚未获得所需的输出。

SELECT x, SUBSTR(x, INSTR(x,' ', -1) + 1) AS y
    FROM  <table_name>;

我想把table还回去:-

提前感谢您的帮助!

gudnpqoy

gudnpqoy1#

您可以尝试使用正则表达式函数REGEXP_SUBSTR

SELECT x, REGEXP_SUBSTR (x, '(\s)(\d+)$') AS y
FROM <table_name>

请点击此处查看演示:http://sqlfiddle.com/#!4/7bc0ee/4866

oyjwcjzk

oyjwcjzk2#

如果你想保留你的SUBSTRING思想,你可以使用VALIDATE_CONVERSION来检查你的子字符串是否是数字。
然后CASE将选择此子字符串或NULL(如果不是数字):

SELECT x, 
CASE WHEN VALIDATE_CONVERSION(SUBSTR(x, INSTR(x,' ', -1) + 1) AS NUMBER) = 1
  THEN SUBSTR(x, INSTR(x,' ', -1) + 1)
  ELSE NULL END AS y
FROM yourtable;

试用db<>fiddle
这里是VALIDATE_CONVERSION的文档

相关问题