在JOIN条件下使用RTRIM

时间:2011-09-13 17:41:19

标签: sql sql-server sql-server-2005 select join

我想通过描述将两个包含产品的表放在一起

TABLE 1: [..fields..] [DESCRIPTION1] [..fields..]

TABLE 2: [..fields..] [DESCRIPTION2] [..fields..]

SELECT [..fields..] FROM TABLE1,TABLE2 
    INNER JOIN TABLE1 
    ON TABLE1.DESCRIPTION1 = TABLE2.DESCRIPTION2

但是在很多情况下,两个表中都有以空格结尾的描述,我也想得到它们,为什么我这样做:

SELECT [..fields..] FROM TABLE1,TABLE2 
    INNER JOIN TABLE1 
    ON TABLE1.DESCRIPTION1 = TABLE2.DESCRIPTION2 
    OR RTRIM(TABLE1.DESCRIPTION1) = RTRIM(TABLE2.DESCRIPTION2)

这不会产生任何错误,但不会带来更多数据。

有人能帮助我吗?

感谢每一位帮助:)

先谢谢你,哈利

3 个答案:

答案 0 :(得分:4)

问题可能是描述末尾的CRLF字符,它看起来像SSMS中的空格,不会被RTRIM()删除。

要查看,请查看选择where Description like '%' + char(13) + char(10)是否返回任何内容。如果说明的末尾只有1个空格,请单独尝试char(13)char(10)。最后,一个标签(char(9))看起来也像一个空格,所以你也可以试试。

如果它确实是任何这些字符,您可以使用REPLACE来摆脱它们:

REPLACE(REPLACE(REPLACE(MyField, CHAR(10), ''), CHAR(13), ''), CHAR(9), '')

我找到了here

答案 1 :(得分:1)

您不需要OR

SELECT [..fields..] 
  FROM TABLE1 T1
       INNER JOIN TABLE2 T2
         ON RTRIM(T1.DESCRIPTION1) = RTRIM(T2.DESCRIPTION2)

答案 2 :(得分:1)

根据数据类型,您根本不需要RTRIM()。我也想知道你的旧式和现代连接语法的混合是否会使你绊倒(尽管这应该会产生更多行,而不是更少)。这会产生什么结果?

SELECT [..columns..]
    FROM dbo.TABLE1 AS t1
    INNER JOIN dbo.TABLE2 AS t2
    ON RTRIM(t1.DESCRIPTION1) = RTRIM(t2.DESCRIPTION2);