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

Extract numeric from string into new columns

提问人:MOT 提问时间:1/19/2023 最后编辑:Ken WhiteMOT 更新时间:1/19/2023 访问量:90

问:

我正在尝试从另一列 (x) 创建一个新列 (y) - 我的目标是从右侧提取字符串的第一个空格之后的数值,如果空格后没有数值,则为 NULL。 我在下面使用了以下 SQL 查询;但是,查询将空格后面的数字和非数字提取到新列 (y) 中 - 请参阅下面的第一张图片。我也尝试使用案例语句,但尚未实现所需的输出。

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

Return table from above query

我希望表格返回:-

Correct table display

提前感谢您的帮助!

SQL Oracle-SQLDader 数据操作 DML

评论


答:

1赞 Trung Duong 1/19/2023 #1

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

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

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

评论

0赞 MOT 1/19/2023
'(\s)(\d+)$' 是什么意思?另外,如果我想从第一个空格的左侧检索一个数字,我将如何更改“(\s)(\d+)$”?
1赞 Trung Duong 1/19/2023
它表示字符串末尾 ('$') 的一组数字字符 ('\d'),用空格 ('/s') 分隔。如果您需要从字符串的开头检索一组数字,则可以使用模式“^(\d+)(\s)”
1赞 Trung Duong 1/19/2023
您可以在此处找到有关正则表达式的更多信息 regexone.com
0赞 Jonas Metzler 1/19/2023 #2

如果你想保留你的想法,你可以用它来检查你的子字符串是否是数字。SUBSTRINGVALIDATE_CONVERSION

然后 a 将选择此子字符串,或者如果不是数字:CASENULL

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