提问人:MOT 提问时间:1/19/2023 最后编辑:Ken WhiteMOT 更新时间:1/19/2023 访问量:90
将字符串中的数字提取到新列中
Extract numeric from string into new columns
问:
我正在尝试从另一列 (x) 创建一个新列 (y) - 我的目标是从右侧提取字符串的第一个空格之后的数值,如果空格后没有数值,则为 NULL。 我在下面使用了以下 SQL 查询;但是,查询将空格后面的数字和非数字提取到新列 (y) 中 - 请参阅下面的第一张图片。我也尝试使用案例语句,但尚未实现所需的输出。
SELECT x, SUBSTR(x, INSTR(x,' ', -1) + 1) AS y
FROM <table_name>;
我希望表格返回:-
提前感谢您的帮助!
答:
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
如果你想保留你的想法,你可以用它来检查你的子字符串是否是数字。SUBSTRING
VALIDATE_CONVERSION
然后 a 将选择此子字符串,或者如果不是数字: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
下一个:保持一列固定并移位其他列
评论