【问题标题】:Error with date insert - Conversion failed when converting date and/or time from character string日期插入错误 - 从字符串转换日期和/或时间时转换失败
【发布时间】:2016-07-01 13:14:48
【问题描述】:

我正在构建一个存储过程,当我尝试插入数据时它失败了。这是插入:

INSERT INTO [AdminDB].[dbo].[DEFECTS_MAINTENANCE]([DATE], [Year], [Month], [Total])
    SELECT
        CONVERT(DATE, getdate()) AS 'Date',
        DATENAME(yyyy, getdate()) AS 'Year',
        DATENAME(mm, getdate()) AS 'Month',
        COUNT([BG_BUG_ID]) AS 'Total'
    FROM 
        [maint_maintenance_db].[td].[BUG]
    WHERE
        YEAR(DETECTION_DATE]) = YEAR(getdate()) 
        AND MONTH([DETECTION_DATE]) =  MONTH(getdate())

当我执行上面的代码时,我得到了这个错误:

消息 241,级别 16,状态 1,过程 usp_TC_TESTCYCL_ID_COUNT_PILOT_UCPATH,第 10 行
从字符串转换日期和/或时间时转换失败。

当我更改代码以使用 CAST 时,它可以工作,但不能正确返回值。下面是代码:

INSERT INTO [AdminDB].[dbo].[DEFECTS_MAINTENANCE]([DATE], [Year], [Month], [Total])
    SELECT 
        CAST(getdate() AS Date),
        CAST(getdate() AS datetime),
        CAST(getdate() AS datetime), 
        COUNT([BG_BUG_ID]) AS 'Total'
    FROM 
        [maint_maintenance_db].[td].[BUG]
    WHERE
        YEAR(DETECTION_DATE]) = YEAR(getdate()) 
        AND MONTH([DETECTION_DATE]) =  MONTH(getdate())

我怎样才能让它工作?任何帮助表示赞赏!

谢谢

【问题讨论】:

  • 您是否尝试获取“MONTH name”或“MONth numer”?您的表 DEFECTS_MAINTENANCE 的列定义是什么
  • 对于初学者,您在最后两列之间的INSERT 语句中缺少逗号。
  • DETECTION_DATE 是什么数据类型?
  • 请发布 DEFECTS_MAINTENANCE 表的 DDL(定义)。似乎“年”或“月”列实际上是日期时间或其他东西。您正在将它们转换为有效的 INSERT 中的日期时间。您的 DATENAME 函数返回一个字符串 (NVARCHAR)。

标签: sql-server


【解决方案1】:

看起来 [Month] 的类型是日期时间。
这就是演员阵容起作用的原因: CAST(getdate() as datetime)

在使用 convert 的 INSERT 中,您试图将 2 位数字隐式转换为日期,但失败了。

,datename(mm,getdate()) AS 'Month' 

将 Month 更改为整数或 char(2),您应该已经准备好了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-17
    • 2017-12-07
    相关资源
    最近更新 更多