我试图从另一列(x)创建一个新列(y)-我的目标是从字符串的右边第一个空格后提取数值,如果空格后没有数值,则为NULL。然而,查询将空格后的数字和非数字都提取到了新列(y)中-请参见下面的第一张图片。我也尝试使用case语句,但尚未获得所需的输出。
SELECT x, SUBSTR(x, INSTR(x,' ', -1) + 1) AS y FROM <table_name>;
我想把table还回去:-
提前感谢您的帮助!
gudnpqoy1#
您可以尝试使用正则表达式函数REGEXP_SUBSTR
REGEXP_SUBSTR
SELECT x, REGEXP_SUBSTR (x, '(\s)(\d+)$') AS y FROM <table_name>
请点击此处查看演示:http://sqlfiddle.com/#!4/7bc0ee/4866
oyjwcjzk2#
如果你想保留你的SUBSTRING思想,你可以使用VALIDATE_CONVERSION来检查你的子字符串是否是数字。然后CASE将选择此子字符串或NULL(如果不是数字):
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的文档
2条答案
按热度按时间gudnpqoy1#
您可以尝试使用正则表达式函数
REGEXP_SUBSTR
请点击此处查看演示:http://sqlfiddle.com/#!4/7bc0ee/4866
oyjwcjzk2#
如果你想保留你的
SUBSTRING
思想,你可以使用VALIDATE_CONVERSION
来检查你的子字符串是否是数字。然后
CASE
将选择此子字符串或NULL
(如果不是数字):试用db<>fiddle
这里是
VALIDATE_CONVERSION
的文档