sql 以“.0”结尾的正则表达式字符串
sql regexp string end with ".0"
我想判断一个正数字符串是否以“.0”结尾,所以写了如下sql:
select '12310' REGEXP '^[0-9]*\.0$'
。结果是 true
然而。我想知道为什么我得到了结果,因为我在“。”之前使用了“\”。逃离。
所以我又写了一个select '1231.0' REGEXP '^[0-9]\d*\.0$'
,但是这次的结果是false
。
谁能告诉我正确的模式?
如果你知道它是一个数字字符串,为什么不直接使用:
select ( val like '%.0' )
如果你想验证字符串在其他地方是否有数字,你需要正则表达式。但是如果你只需要检查最后两个字符,like
就足够了。
关于你的问题.
是正则表达式中的通配符。它匹配任何字符。
正则表达式中的点 (.) 具有特殊含义(任何字符),如果您想要字面上的点,则需要转义:
select '12310' REGEXP '^[0-9]*\.0$';
结果:
false
使用双斜线转义Hive中的特殊字符。斜杠有特殊含义,用于 \073(分号)、\n(换行符)、\t(制表符)等字符。这就是为什么转义需要使用双斜杠。同样对于字符 class 数字使用 \d
:
hive> select '12310.0' REGEXP '^\d*?\.0$';
OK
true
方括号内的字符也不需要双斜杠转义:[.]
可以用来代替\.
我想判断一个正数字符串是否以“.0”结尾,所以写了如下sql:
select '12310' REGEXP '^[0-9]*\.0$'
。结果是 true
然而。我想知道为什么我得到了结果,因为我在“。”之前使用了“\”。逃离。
所以我又写了一个select '1231.0' REGEXP '^[0-9]\d*\.0$'
,但是这次的结果是false
。
谁能告诉我正确的模式?
如果你知道它是一个数字字符串,为什么不直接使用:
select ( val like '%.0' )
如果你想验证字符串在其他地方是否有数字,你需要正则表达式。但是如果你只需要检查最后两个字符,like
就足够了。
关于你的问题.
是正则表达式中的通配符。它匹配任何字符。
正则表达式中的点 (.) 具有特殊含义(任何字符),如果您想要字面上的点,则需要转义:
select '12310' REGEXP '^[0-9]*\.0$';
结果:
false
使用双斜线转义Hive中的特殊字符。斜杠有特殊含义,用于 \073(分号)、\n(换行符)、\t(制表符)等字符。这就是为什么转义需要使用双斜杠。同样对于字符 class 数字使用 \d
:
hive> select '12310.0' REGEXP '^\d*?\.0$';
OK
true
方括号内的字符也不需要双斜杠转义:[.]
可以用来代替\.