【问题标题】:Select records containing non alphanumeric characters in DB2在 DB2 中选择包含非字母数字字符的记录
【发布时间】:2014-04-08 11:21:25
【问题描述】:

我正在尝试在 DB2 中创建一个查询,该查询将选择给定字段中包含非字母数字字符的所有记录。我已经尝试过post 中的代码,但它似乎不起作用。我需要搜索的信息是地址信息,因此可以接受空格,即

数据示例 - 10 The High Street - 好,因此不在报告中显示 10 高街 - 不好,因此在报告中显示

任何帮助将不胜感激

【问题讨论】:

  • 给我示例代码
  • 请发布您的代码(不仅仅是链接到另一个帖子)并解释“似乎不起作用”的含义。
  • 您链接到的帖子使用了正则表达式,这是 DB2 所没有的特性。你必须想出一个不同的解决方案。
  • 我尝试过使用下面的。
  • 我尝试过使用:- SELECT * FROM PAYMENT WHERE NOT xmlcast(xmlquery('fn:matches($s, "^[a-zA-Z0-9 ]*[0-9][a-zA-Z0-9 ]*$")' passing LONG_NAME AS "s") AS int)=0。我以前使用过 xmlcast,它与另一个正则表达式一起工作正常,以确定前 2 个字符是否是字母,后 2 个字符是否是使用 "^[a-zA-Z]{2}[0-9]{2}" 的数字当我运行上述查询时,返回所有记录,包括包含的记录没有特殊字符或空格,两者都不应该返回

标签: sql db2


【解决方案1】:

一种选择是将所有已知的可打印字符转换为一个空格,并测试结果是否大于单个空格。

select KEY_VALUE
from TABLE
where TRANSLATE(CHAR_COLUMN,'','ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890') <> '';

【讨论】:

  • 如果你这样做,TRANSLATE() 的第三个参数应该只列出你想被接受的字符。最后的字符,即!@#$%^&amp;*()-=+/\{}[];:.,&lt;&gt;? ,可能应该从列表中删除。
猜你喜欢
  • 2019-11-12
  • 2016-01-02
  • 1970-01-01
  • 2021-12-13
  • 2016-10-29
  • 2019-12-16
  • 2016-04-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多