【问题标题】:Is it possible to only get non alphabetic, English alphabet, and non numeric from a column DB2是否可以从 DB2 列中仅获取非字母、英文字母和非数字
【发布时间】:2017-05-08 12:48:45
【问题描述】:

有时我在我的数据库中得到 Ÿ(十六进制 C5B8:2 个字节,1 个字符),并且我有一个脚本可以处理多个无法读取该数据的数据,因为它不知道如何处理它所以它停止整个过程,我必须进入我的日志并查看错误在哪里,以便我可以重新启动整个过程。

我想执行一个查询,只给我不属于英文字母的字符,以便我可以查看是否应该更改它们。

我试图只寻找 UTF8 字符,但 Ÿ 是一个 UTF8 字符,所以我需要寻找另一种方法。

包含以下以外的单词:

A-B-C-D-E-F-G-H-I-J-K-L-M-N-O-P-Q-R-S-T-U-V-W-X-Y-Z

和数字

0-1-2-3-4-5-6-7-8-9

不包括字母数字(以防有人写这样的地址)

h3ll0

我在想这样的事情:

SELECT * FROM myTable WHERE myCol != (/^[A-Za-z]+$/)

类似的东西,我只得到不属于英文字母或数字 0-9 的字符的列

【问题讨论】:

  • 试试WHERE myCol NOT REGEXP '^[a-z0-9]*$'WHERE myCol NOT REGEXP BINARY '^[a-zA-Z0-9]*$'
  • @WiktorStribiżew 令牌 REGEXP 无效。有效令牌:LIKE BETWEEN。
  • @learningbyexample,您的问题被标记为“mysql”,因此我们假设您使用的是 MySQL,并且 REGEXP 是 MySQL 中的有效谓词。如果您使用不同的 SQL 数据库,请适当地编辑您的问题的标签。不同的 SQL 数据库使用正则表达式的语法不同。

标签: regex db2 db2-400


【解决方案1】:

我不确定我是否理解正确。基本上,您想找到所有包含非英文字母的单词的列?如果是这样,这可能会起作用:

SELECT * FROM `myTable` WHERE `myCol` NOT REGEXP '[A-Za-z0-9]'

编辑:此答案是为“mySQL”这个问题的旧标签编写的,您已将其更改为 db2。我已经尝试为 db2 11 修改它,但这充其量只是一个有根据的猜测:

SELECT * FROM `myTable` WHERE `myCol` NOT REGEXP_LIKE '[A-Za-z0-9]'

【讨论】:

  • 令牌 ` 无效。有效标记:( + - ? : DAY INF NAN NOT RID ROW RRN CASE CAST CHAR DATE DAYS。
  • 抱歉,看看我的数据库,它是 DB2
  • @learningbyexample 请用双引号代替单引号检查。此外,它可能不喜欢表和列名周围的引号
  • 刚刚尝试过 关键字 REGEXP_LIKE 不是预期的。有效令牌:LIKE BETWEEN。 给出此错误
  • SELECT myCol FROM myTable WHERE NOT REGEXP_LIKE (myCol, '[A-Za-z0-9]') 我厌倦了这个但我得到了这个错误QQQSVREG in QSYS type *SRVPGM not found。
【解决方案2】:

查看

翻译

功能 - 见documentation

将所有常规字符和数字转换为空字符串 - 例如:

select translate(mycol, '', 'ABCDEFGabcdefghi1234567890')
  from mytable

这不是完整的解决方案,但您应该明白这一点。这在 DB2 LUW 中有效,并且在 i 系列中可用。

【讨论】:

  • 函数 TRANSLATE 的参数 02 无效。
  • 所以检查文档 - 在 LUW 参数 3 和 2 中反之亦然,但我从文档中获取了这个 - 我没有 i 系列来测试它....
猜你喜欢
  • 2017-11-21
  • 2020-06-14
  • 1970-01-01
  • 1970-01-01
  • 2011-02-28
  • 1970-01-01
  • 2020-11-28
  • 2011-12-20
  • 1970-01-01
相关资源
最近更新 更多