【问题标题】:SQL Error in Casting转换中的 SQL 错误
【发布时间】:2016-11-23 15:40:16
【问题描述】:

我正在尝试加入日期和时间字段,以便使用以下代码选择某个时间点的最新状态...

select  max(CONVERT(DATETIME, S.Start_date, 108) 
    + ISNULL(STUFF(case when len(S.start_time) < 4 then '0' + S.start_time else S.start_time end,3,0,':'),'23:59') as LATST
        , computer_number
        , event_key
        , exam_key
    from    CRIS_status S
        where cast(Start_date as datetime) <= '17 Jul 2016 23:59:59'
    group by computer_number, event_key, exam_key

我收到以下错误消息 Msg 242, Level 16, State 3, Line 1...

【问题讨论】:

  • 编辑您的问题并提供示例数据和所需结果。
  • Start_date 和 start_time 不只是一个日期时间字段的任何原因?
  • 我在我的环境中进行了相同类型的转换,结果很完美,这里没有错误(命令成功完成)。

标签: sql sql-server tsql


【解决方案1】:

您正在检查 DatetimeVarchar,这可能会出错

试试这个...

select  max(CONVERT(DATETIME, S.Start_date, 108) 
    + ISNULL(STUFF(case when len(S.start_time) < 4 then '0' + S.start_time else S.start_time end,3,0,':'),'23:59') as LATST
        , computer_number
        , event_key
        , exam_key
    from    CRIS_status S
        where cast(Start_date as datetime) <= cast('17 Jul 2016 23:59:59' as datetime)
    group by computer_number, event_key, exam_key

【讨论】:

    【解决方案2】:

    始终使用明确的日期格式

    select  max(CONVERT(DATETIME, S.Start_date, 108) 
        + ISNULL(STUFF(case when len(S.start_time) < 4 then '0' + S.start_time else S.start_time end,3,0,':')
     ,'23:59') as LATST
            , computer_number
            , event_key
            , exam_key
        from    CRIS_status S
            where cast(Start_date as datetime) < '20160718'
        group by computer_number, event_key, exam_key
    

    【讨论】:

    • 哦,谢谢 Madhivanan,我会试一试告诉你。
    猜你喜欢
    • 2013-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-18
    相关资源
    最近更新 更多