我有一列不应该包含任何字母数字值。我试过了
case when col1 like '%[0-9]%' then 1 else 0 end
但这是行不通的。
yeotifhr1#
like 不明白你给出的模式。如果需要正则表达式匹配,请使用正则表达式函数:
like
select col1, regexp_like(col1, '.*[0-9].*') has_number from mytable
这将为您提供一个布尔值( true / false ). 如果你想要一个号码,你可以 cast 或者使用 case 而不是表达式。这将检查字符串是否包含任何数字。如果要搜索任何字母数字字符,则 \w 很方便:
true
false
cast
case
\w
regexp_like(col1, '.*\\w.*')
最后,如果要确保字符串只包含字母数字字符:
regexp_like(col1, '^\\w*$')
jxct1oxe2#
您的语句不起作用,因为您需要使用regexp关键字来使用regexp,而您的regexp是错误的。
select ... from ... where lower(field) regexp '[a-z0-9]+'
请参阅此处的regexp文档
2条答案
按热度按时间yeotifhr1#
like
不明白你给出的模式。如果需要正则表达式匹配,请使用正则表达式函数:这将为您提供一个布尔值(
true
/false
). 如果你想要一个号码,你可以cast
或者使用case
而不是表达式。这将检查字符串是否包含任何数字。如果要搜索任何字母数字字符,则
\w
很方便:最后,如果要确保字符串只包含字母数字字符:
jxct1oxe2#
您的语句不起作用,因为您需要使用regexp关键字来使用regexp,而您的regexp是错误的。
请参阅此处的regexp文档