代码之家  ›  专栏  ›  技术社区  ›  rsapru

SQL 2000或子句在SQL 2005中不工作

  •  1
  • rsapru  · 技术社区  · 16 年前

    有谁能帮我理解一下为什么下面的查询在SQL 2000中可以正常工作,而在SQL 2005中不能正常工作?

    在SQL 2005中,它出错“char数据类型转换为smalldatetime数据类型导致smalldatetime值超出范围”

    DECLARE @Table table(date varchar(6),code char(1))
    INSERT INTO @Table select '010209','N'
    INSERT INTO @Table select '032809','N'
    INSERT INTO @Table select space(6),'N'
    
    select * FROM  @Table  
    WHERE  
    (
          (
                date <> ''  
                AND        
                GETDATE() < CAST(LEFT(date, 2) + '/' +  SUBSTRING(date, 3, 2) + '/' +  RIGHT(date,2) AS SMALLDATETIME)
          )  
          OR code = 'Y')
    
    3 回复  |  直到 16 年前
        1
  •  2
  •   Wayne    16 年前

    是的,Leppie本可以更清楚一点,但<gt;''与您的共享空间不匹配(6)。

    这将有效(使用LTRIM/RTRIM)

    DECLARE @Table table(date varchar(6),code char(1))
    INSERT INTO @Table select '010209','N'
    INSERT INTO @Table select '032809','N'
    INSERT INTO @Table select space(6),'N'
    
    select * FROM  @Table  
    WHERE  
    (
          (
                ltrim(rtrim(date)) <> ''  
                AND        
                GETDATE() < CAST(LEFT(date, 2) + '/' +  SUBSTRING(date, 3, 2) + '/' +  RIGHT(date,2) AS SMALLDATETIME)
          )  
          OR code = 'Y')
    
        2
  •  2
  •   leppie    16 年前

    错误正是它所说的。

    不管你多么努力, ' / / ' 永远不会有约会。

        3
  •  0
  •   Joakim Backman    16 年前

    使用

    date.RTRIM() <> ''
    

    而不是

    date <> ''