Sql 像表达式一样给出';输入不匹配';错误

Sql 像表达式一样给出';输入不匹配';错误,sql,regex,hive,redash,rlike,Sql,Regex,Hive,Redash,Rlike,我正在通过Redash查询蜂窝表。我有一个类似以下的问题: SELECT CAST(id AS INT) as id, COUNT(sales) AS num_sales FROM sales_table WHERE id RLIKE '\d*' GROUP BY id 我试图只选择一个数字字符串的ID,因此使用了WHERE子句。这给了我一个错误: Error running query: line 42:20: mismatched input

我正在通过Redash查询蜂窝表。我有一个类似以下的问题:

SELECT 
    CAST(id AS INT) as id,
    COUNT(sales) AS num_sales
FROM 
    sales_table
WHERE 
    id RLIKE '\d*'
GROUP BY 
    id
我试图只选择一个数字字符串的ID,因此使用了
WHERE
子句。这给了我一个错误:

Error running query: line 42:20: mismatched input 'RLIKE'. Expecting: '%', '*', '+', '-', '.', '/', 'AT', '[', '||', <expression>
运行查询时出错:第42:20行:输入“RLIKE”不匹配。应为:“'”、“*”、“+”、“-”、“.”、“/”、“AT”、“[”、“| |”,

在配置单元中,代码应使用
REGEXP
RLIKE
进行编译。但是,正则表达式不能满足您的要求。您需要:

WHERE id RLIKE '^[0-9]*$'
也就是说,所有字符都是数字,而不是只包含一个数字。实际上,您的版本将匹配任何字符串,因为数字是可选的。

您可以尝试:

WHERE id RLIKE '^[0-9]+$'
请注意,上面的表达式确保
id
仅由数字组成(且非空)。原始regexp检查
id
是否包含0到n个数字(这就是
*
量词的意思):这是允许的方式,因为它基本上允许任何非空的内容。

1)


Hive正则表达式需要双重转义

此外,对于完全匹配,您应该使用锚定,因此-

id RLIKE '^\\d+$'
如果空字符串也是一个选项,那么-

id RLIKE '^\\d*$'
2)
您可以采用相反的方法搜索不包含非数字的字符串-

id  NOT RLIKE '\\D'
3)
在配置单元中,错误强制转换将导致null(而不是异常),因此您可以使用-

cast(id as int) is not null


Hive正则表达式需要双重转义
int(id) is not null