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

方括号内的字符也不需要双斜杠转义:[.]可以用来代替\.