在Postgres 9.2.4的JOIN的ON子句中使用UPPER

时间:2013-08-01 23:46:18

标签: space postgresql-9.2

在上层语句中包含的varchar列上连接两个表时,如果两个varchar值都有尾随空格,则连接不起作用。

在下面的两个例子中,VALUE1和VALUE2 ='ABC'

- 不起作用

SELECT * FROM TABLE1 INNER JOIN TABLE2
ON UPPER(VALUE1) = UPPER(VALUE2)

- 作品

SELECT * FROM TABLE1 INNER JOIN TABLE2
ON UPPER(TRIM(VALUE1)) = UPPER(TRIM(VALUE2))

还有其他人遇到过这个问题吗?

1 个答案:

答案 0 :(得分:0)

让我们看看:

CREATE TABLE table1(value1 varchar(10));
CREATE TABLE table2(value2 varchar(10));
INSERT INTO table1 values('ABC ');
INSERT INTO table2 values('ABC ');

SELECT * FROM TABLE1 INNER JOIN TABLE2
ON UPPER(VALUE1) = UPPER(VALUE2)

结果:

 value1 | value2 
--------+--------
 ABC    | ABC 

似乎可行

请确保您不使用CHAR(N)类型而不是VARCHAR(N),因为它们有关于空格的不同语义。