转换为datetime时出错:日期列+时间列

时间:2014-11-14 11:16:21

标签: sql-server sql-server-2008

下面是我的sql查询,内部查询返回值,但外部查询返回错误: " 将字符串转换为smalldatetime数据类型时转换失败。 "

SELECT x.*
FROM (
    SELECT 
     Convert(SMALLDATETIME, Convert(VARCHAR(30), Convert(DATE, Event_Date, 101)) + 
     Convert(VARCHAR(30), ' ') + Convert(VARCHAR(30), Convert(TIME, Event_Time)), 101)
        ,[Event_Date]
        ,Location
        ,Street
        ,City
        ,[State]
        ,Country
        ,ZipCode
        ,[Subject]
        ,[Detail]
        ,[LeadInstructor]
        ,[CoInstructor]
    FROM [Temp_EVT_EVENT]
    ) x

2 个答案:

答案 0 :(得分:0)

根据您的Event_Date格式,请查看此处:Date Formats

似乎正确的格式是120,而不是101。

所以:

SELECT x.*
FROM (
    SELECT 
     Convert(SMALLDATETIME, Convert(VARCHAR(30), Convert(DATE, Event_Date, 120)) + 
     Convert(VARCHAR(30), ' ') + Convert(VARCHAR(30), Convert(TIME, Event_Time)), 120)
        ,[Event_Date]
        ,Location
        ,Street
        ,City
        ,[State]
        ,Country
        ,ZipCode
        ,[Subject]
        ,[Detail]
        ,[LeadInstructor]
        ,[CoInstructor]
    FROM [Temp_EVT_EVENT]
    ) x

答案 1 :(得分:0)

SMALLDATE可以接受最高18:00:00的时间价值。但你使用TIME格式18:00:00.000000就是显示错误的原因。检查查询并更新状态。

首先单独运行此查询:

  SELECT 
     Convert(SMALLDATETIME, Convert(VARCHAR(30), Convert(DATE, CAST('2014-11-14' AS DATETIME), 101)) + 
     Convert(VARCHAR(30), ' ') + Convert(VARCHAR(30), CONVERT(VARCHAR(8), CAST('18:13:04' AS DATETIME), 108)), 101) AS column1

如果你得到了答案。 ' 2014-11-14 18:13:00'

然后尝试运行:

 SELECT 
         Convert(SMALLDATETIME, Convert(VARCHAR(30), Convert(DATE, CAST(Event_Date AS DATETIME), 101)) + 
         Convert(VARCHAR(30), ' ') + Convert(VARCHAR(30), CONVERT(VARCHAR(8), CAST(Event_Time AS DATETIME), 108)), 101) AS column1 FROM Temp_EVT_EVENT

如果你得到正确的答案。然后运行:

 SELECT x.*
FROM (
    SELECT 
     Convert(SMALLDATETIME, Convert(VARCHAR(30), Convert(DATE, CAST(Event_Date AS DATETIME), 101)) + 
     Convert(VARCHAR(30), ' ') + Convert(VARCHAR(30), CONVERT(VARCHAR(8), CAST(Event_Time AS DATETIME), 108)), 101) AS column1
        ,[Event_Date]
        ,Location
        ,Street
        ,City
        ,[State]
        ,Country
        ,ZipCode
        ,[Subject]
        ,[Detail]
        ,[LeadInstructor]
        ,[CoInstructor]
    FROM [Temp_EVT_EVENT]
    ) x