【问题标题】:Teradata Character Column with non alphabet values具有非字母值的 Teradata 字符列
【发布时间】: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 '\'

标签: sql teradata


【解决方案1】:

我尚未对此进行测试,但我认为您可以使用 otranslate 从名称中删除这些字符时测试是否相等

select name 
from tablesource 
where name <> otranslate(name,'-.#~!','') 

【讨论】:

  • 嗨菲尔,非常感谢您的及时回复。我确实使用了您的建议,并且查询效果很好。
猜你喜欢
  • 2016-05-22
  • 1970-01-01
  • 2018-04-22
  • 1970-01-01
  • 2021-05-17
  • 2014-04-26
  • 2013-01-12
  • 1970-01-01
  • 2013-06-26
相关资源
最近更新 更多