【问题标题】:How to Convert Decimal to DateTime in where clause如何在where子句中将十进制转换为日期时间
【发布时间】:2013-08-07 04:32:07
【问题描述】:

我正在尝试将 Decimal DateTime 值转换为 DateTime 数据类型并检查选择查询中的条件

SELECT * FROM CLBALTRNTBL WHERE CONVERT(DATETIME,LSTDAT) >= @sDt 
      AND CONVERT(DATETIME,LSTDAT) <= @eDt

但出现以下错误

Arithmetic overflow error converting expression to data type datetime.

我在存储过程中执行此操作。而@sDt@eDtDateTime变量。 LSTDAT 的格式为 yyyyMMddie 20120317

但如果我直接输入LSTDAT 列,例如:20130805,则执行查询。但是列呢??

你能帮帮我吗?

【问题讨论】:

  • 我认为在 SP 之前存在 Set DateFormat

标签: sql sql-server datetime decimal converter


【解决方案1】:

试试这个:

SELECT *
FROM CLBALTRNTBL
WHERE CONVERT(DATETIME, CONVERT(VARCHAR(8), LSTDAT), 112) >= @sDt
    AND CONVERT(DATETIME, CONVERT(VARCHAR(8), LSTDAT), 112) <= @eDt

【讨论】:

    【解决方案2】:

    转换变量并与列进行比较比转换列更有效。

    SELECT * 
    FROM CLBALTRNTBL 
    WHERE LSTDAT >= CONVERT(INT,CONVERT(NVARCHAR(8),@sDt,112))
      AND LSTDAT <= CONVERT(INT,CONVERT(NVARCHAR(8),@eDt,112))
    

    SQLFiddle DEMO

    【讨论】:

      【解决方案3】:
      SELECT * FROM CLBALTRNTBL WHERE LSTDAT >= convert(char(8),@sDt, 112) 
      AND CONVERT(DATETIME,LSTDAT) <= convert(char(8),@eDt, 112)
      

      这将防止您的错误并更快地执行,但是您的基础中确实有一些无效的 LSTDAT 无法转换为日期

      【讨论】:

        【解决方案4】:
        SELECT * FROM CLBALTRNTBL WHERE CONVERT(DATETIME,LSTDAT) >= @sDt 
              AND CONVERT(DATETIME,Convert(VarChar(8),LSTDAT),112) <= @eDt
        

        将是一种方式。

        例如20120317 到 '20120317' 然后 112 是 ISO 格式 yyyyMMdd

        【讨论】:

        • 我是个 twit 应该是 varchar(8)
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-29
        • 1970-01-01
        • 1970-01-01
        • 2017-12-21
        • 1970-01-01
        相关资源
        最近更新 更多