【发布时间】:2018-05-03 21:06:33
【问题描述】:
我正在尝试将一些查询从 Oracle 环境转换为 Postgres。这是其中一个查询的简化版本:
SELECT * FROM TABLE
WHERE REGEXP_LIKE(TO_CHAR(LINK_ID),'\D')
我相信等效的 postgreSQL 应该是这样的:
SELECT * FROM TABLE
WHERE CAST(LINK_ID AS TEXT) ~ '\D'
但是当我在它们各自的环境中对完全相同的数据集运行这些查询时,第一个查询不输出任何记录(这是正确的),第二个查询输出表中的所有记录。我没有编写原始代码,但据我了解,它正在寻找数字字段 LINK_ID 中非数字字符的任何值。 \D 元字符在 Oracle 和 postgres 中的行为是否应该不同?我在文档中没有看到任何应该说的内容。
【问题讨论】:
-
能否提供几行数据示例?
-
每个DBMS中
link_id的数据类型是什么? -
尾随空格的处理方式不同?输入
rtrim。 -
@GregoryArenius 这里有一些值... 22290704.00000000 40006661.00000000 22291131.00000000 0.00000000 0.00000000 所有值都是数字。
-
“作品”是什么意思?如果您不知道它要做什么,您怎么知道它在 postgres 上“不起作用”而在 oracle 上“不起作用”? :-)
标签: sql oracle postgresql regexp-like