【问题标题】:How do I search for a five digit number in a string column?如何在字符串列中搜索五位数字?
【发布时间】:2012-12-13 05:30:25
【问题描述】:

我要做的是确定(使用 Teradata SQL)某人的邮政编码是否意外地放在了地址行上。我浏览了各种论坛,但找不到任何类似的问题。

最后,我想写这样的东西:

Where address_line_1 like '%[0-9][0-9][0-9][0-9][0-9]%'

有什么想法吗?

目标数据库是 Teradata 13.x

【问题讨论】:

  • 您使用的是哪个版本的 Teradata?

标签: sql string wildcard numeric teradata


【解决方案1】:

如果您想检查整个列以查看它是否仅包含邮政编码,您可以尝试以下操作:

where address_line_1 between '00000' and '99999'

但是,如果您正在考虑在整个字符串中搜索任何出现的五个连续数字,那么这无论如何都不是一个好的测试。例如,以下将是一个完全有效的邮寄地址:

28305 Southwest Main Street

在加载数据后进行有效性检查很困难;这样的任务确实应该在加载过程中执行。

【讨论】:

  • 必须同意在加载地址之前使用 PostalSoft(如果我没记错的话,现在是 IBM 的数据质量堆栈的一部分)之类的工具来清理地址是一项更合适的任务。否则,您将面临“垃圾进垃圾出”的困境。
【解决方案2】:

查找与此正则表达式匹配的所有条目[^0-9][0-9][0-9][0-9][0-9][0-9][^0-9]

因为这会在某些文本中找到正好 5 位数长的数字,假设这是邮政编码的定义。

【讨论】:

  • Teradata 在 Teradata 14 之前不支持正则表达式。OP 没有说明他们使用的是哪个版本的 Teradata。
  • 你不知道吗,版本 13。
  • @ape 如果有正则表达式支持,那么这个正则表达式也只会返回那些在 5 位字符串的极端位置存在非数值的条目。例如,它将匹配“p12345q”,但会匹配“12345”失败。也许你打算写,[^0-9]?[0-9]{5}[^0-9]?
  • 这个答案在 SQL Server 上帮助了我。 +1
【解决方案3】:

如果您的 address_line_1 中有四位数字,则“00000”和“99999”之间的地址_line_1 将不起作用,因为它会提取它们 其中 address_line_1 like '%[0-9][0-9][0-9][0-9][0-9]%' 会是更好的解决方案。

【讨论】:

猜你喜欢
  • 2011-07-22
  • 1970-01-01
  • 1970-01-01
  • 2020-09-29
  • 1970-01-01
  • 1970-01-01
  • 2022-01-23
  • 2022-11-05
相关资源
最近更新 更多