日期插入时出错 - 从字符串转换日期和/或时间时转换失败

时间:2016-06-30 21:24:53

标签: sql-server

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

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())

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

由于

1 个答案:

答案 0 :(得分:1)

看起来[月]是日期时间类型 这就是演员表演的原因: CAST(getdate()as datetime)

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

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

将月更改为整数或字符(2),您应该全部设置。