sql regexp字符串以“ .0”结尾

时间:2019-11-27 13:22:41

标签: sql regex hive hiveql

我想判断一个正数字符串是否以“ .0”结尾,因此我编写了以下sql: select '12310' REGEXP '^[0-9]*\.0$'。结果为true。我想知道为什么会得到结果,因为我在“”之前使用“ \”。逃离。 因此,我将另一个写为select '1231.0' REGEXP '^[0-9]\d*\.0$',但是这次的结果是false。 谁能告诉我正确的模式?

2 个答案:

答案 0 :(得分:4)

正则表达式中的点(。)具有特殊含义(任何字符),并且如果需要字面的点,则需要转义:

 select '12310' REGEXP '^[0-9]*\\.0$';

结果:

false

使用双斜杠在Hive中转义特殊字符。斜杠具有特殊含义,用于\ 073(分号),\ n(换行符),\ t(制表符)等字符。这就是为什么转义时需要使用双斜杠的原因。同样对于字符类数字,请使用\\d

hive> select '12310.0' REGEXP '^\\d*?\\.0$';
OK
true

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

答案 1 :(得分:2)

如果您知道它是一个数字字符串,为什么不直接使用:

select ( val like '%.0' )

如果要验证字符串在其他所有地方都有数字,则需要正则表达式。但是,如果您只需要检查最后两个字符,那么like就足够了。

关于您的问题,.是正则表达式中的通配符。它可以匹配任何字符。