【问题标题】:Im stuck with this DATEDIFF我坚持这个 DATEDIFF
【发布时间】:2017-01-16 17:10:47
【问题描述】:

好的,所以我不断收到此错误:

消息 245,第 16 级,状态 1,第 1 行 将 varchar 值“Days”转换为数据类型 int 时转换失败。

下面是我的代码.....我在这里做错了什么......我试图显示日期、小时和分钟的差异......我在我的 datediff 中使用了 CASTS,因为这些是不同的列所以我使用演员阵容将它们结合起来,以便更轻松地完成我的约会.....

DATEDIFF(DD, checkin_datetime, CAST(txt_signoff_ml_date AS DATETIME) + CAST(txt_signoff_ml_time AS DATETIME)) + ' Days ' 
        + DATEDIFF(HH, checkin_datetime, CAST(txt_signoff_ml_date AS DATETIME) + CAST(txt_signoff_ml_time AS DATETIME)) + ' Hours '
        + DATEDIFF(MINUTE, checkin_datetime, CAST(txt_signoff_ml_date AS DATETIME) + CAST(txt_signoff_ml_time AS DATETIME)) + ' Minutes'
AS Time_diff2,

【问题讨论】:

标签: sql-server tsql datediff


【解决方案1】:

DateDiff 函数将以整数形式返回结果。在这里,您将整数值和字符串值组合在一起。因此,您将面临类型差异错误。

您必须将 datediff 输出转换为 varchar,如下所述

cast(DATEDIFF(DD, checkin_datetime, CAST(txt_signoff_ml_date AS DATETIME) + CAST(txt_signoff_ml_time AS DATETIME))as varchar(50)) + ' Days ' 
        + cast(DATEDIFF(HH, checkin_datetime, CAST(txt_signoff_ml_date AS DATETIME) + CAST(txt_signoff_ml_time AS DATETIME))as varchar(50)) + ' Hours '
        + cast(DATEDIFF(MINUTE, checkin_datetime, CAST(txt_signoff_ml_date AS DATETIME) + CAST(txt_signoff_ml_time AS DATETIME)) as varchar(50)) + ' Minutes'

【讨论】:

    【解决方案2】:

    这个:

    DATEDIFF(DD, checkin_datetime, CAST(txt_signoff_ml_date AS DATETIME)
    

    需要一个右括号。这应该让你开始。

    【讨论】:

    • 其实括号是正确放置的。错误是因为将integer(Datediff result)string(days) 连接在一起。它可以通过显式转换来修复,但我认为查询在逻辑上不正确
    猜你喜欢
    • 2021-07-27
    • 2016-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-02
    • 1970-01-01
    相关资源
    最近更新 更多