【发布时间】:2021-10-21 13:37:50
【问题描述】:
我在 Teradata 中有一个名称列,其中一列中包含客户全名。有些名字带有 -,_,.,/,#,!在名称字符之间。我希望能够提取具有这些条件的名称的记录。有没有更好的选择在下面的场景中提取记录?
目前,我正在编写这样的查询 SELECT NAME FROM TABLESOURCE WHERE NAME LIKE ANY('%-%','%.%','%#%','%~%','%!%')
提前致谢。
【问题讨论】:
-
您可以使用正则表达式,这会过滤 a-z 范围之外的任何字符:
where regexp_similar(name, '.*[^a-z]+.*', 'i') = 1 -
感谢您的回复 dnoeth,我收到错误 9234,说该模式不是有效模式。顺便说一句,我需要能够使用上述任何字符提取记录。例如,假设名称具有以下值 Sarah% Trista Norman、Mike $Silver、Travis!风格,杰米方,乔·多伊。我应该得到诸如 Sarah% Trista Norman、Mike $Silver、Travis 之类的结果!使用查询 LIKE NAME ANY('%$%','%!%') 的样式。我创建了一个测试数据,但无法提取名称中带有 % 的行。我写了 LIKE NAME'%%%'。如何获取其中包含 % 的名称行?
-
'.*[^a-z]+.*'是有效模式,您的 Teradata 版本是什么?您还可以列出那些已知字符:where regexp_similar(name, '..*[-%_.\/#!$]+.*', 'i') = 1。关于 LIKE 中的%,您必须对其进行转义like '%\%%' escape '\'