【发布时间】:2017-11-16 18:50:11
【问题描述】:
我在 Oracle 中看到,有时是 'A ' = 'A',但有时是 'A ' != 'A',请参阅下面的示例,您会看到详细信息。我一直在尝试缩短代码。
CREATE TABLE AAA (
T1 CHAR(3),
T2 VARCHAR(3),
T3 VARCHAR(5)
);
insert into AAA
SELECT 'A','A ', 'A ' FROM DUAL;
COMMIT;
SELECT * FROM AAA WHERE T1 = 'A'
UNION ALL
SELECT * FROM AAA WHERE T2 = 'A '
UNION ALL
SELECT * FROM AAA WHERE T2 = 'A '
UNION ALL
SELECT * FROM AAA WHERE TRIM(T2) = TRIM('A ')
UNION ALL
SELECT CASE WHEN 'A' = 'A ' THEN '1' ELSE '0' END T1,
CASE WHEN 'A ' = 'A' THEN '1' ELSE '0' END T2,
CASE WHEN 'A ' = 'A ' THEN '1' ELSE '0' END T2
FROM DUAL;
我问这个问题是因为在我的数据库中,有时当我将表 A 连接到表 B 时,有时我们不需要执行此操作。当我们需要TRIM(列)?当'A ' = 'A' ?什么时候'A ' != 'A'?
【问题讨论】:
-
当你想要或需要更松散的匹配时,你会规范化数据。 ` 'Password' = TRIM(' Password ') ` 可能很糟糕。
-
理想情况下,如果您在将数据放入表之前清理数据并删除前导/尾随空格,则不需要使用
TRIM。 -
@Tim Biegeleisen 我知道,但是这个数据一直存在,有很多这样的专栏。
-
如果您需要进行精确比较,我认为您可以尝试使用
T1 || '^' = 'A^'(最后添加附加字符)。唉,我现在没有Oracle,也查不到。 -
我知道,精确比较是 trim(),没关系,但有时如果我们不比较 2 table care 很容易出错。