如何将mmm-dd转换为SQL Server日期时间?

时间:2017-05-13 06:17:45

标签: sql-server tsql

我试图使用select中的insert将nvarchar(6)列中的数据从一个表插入另一个表的datetime列。

以下是我正在处理的查询:

INSERT INTO WORKORDERS ([A-POWDER BY], [A-MOUNT BY])
     SELECT  
         [A-POWDER BY], [A-MOUNT BY]
     FROM  
         [table 1]

这是一些示例数据:

 id   [A-POWDER BY]  [A-MOUNT BY]
 ---------------------------------
  1        Aug-16      Aug-16   
  2        Aug-26      Aug-27   
  3        Aug-15      Aug-16   
  4        Dec-16      Dec-16   
  5        Apr-16      Apr-16   
  6        Oct-16      Oct-16   

这是我得到的错误:

  

Msg 241,Level 16,State 1,Line 2
  从字符串转换日期和/或时间时转换失败。

数据格式类似于Aug-16。我尝试使用CONVERT(NVARCHAR, [datefield], 105) AS datetime,但我仍然遇到同样的错误。

我该如何解决?

谢谢

2 个答案:

答案 0 :(得分:0)

我不认为尝试插入Aug-16形式的日期字符串会起作用,因为没有指定日期。如果您可以使用本月的第一天,那么您可以使用串联构建日期字符串,然后将其转换为真正的日期时间。

INSERT INTO WORKORDERS (
    [A-POWDER BY],
    [A-MOUNT BY]
)
SELECT  
    CONVERT(datetime,
            '01 ' + LEFT([A-POWDER BY], 3) + ' ' + RIGHT([A-POWDER BY], 2),
            6),      -- 6 format mask for 'dd mon yy'
    CONVERT(datetime,
            '01 ' + LEFT([A-MOUNT BY], 3) + ' ' + RIGHT([A-MOUNT BY], 2),
            6)
FROM [table 1]

答案 1 :(得分:0)

您可以将转换与' 01 - '一起使用如下:

INSERT INTO WORKORDERS ([A-POWDER BY], [A-MOUNT BY])
     SELECT  
         [A-POWDER BY]= (convert(date, '01-',[A-POWDER BY])) , [A-MOUNT BY]= (convert(date, '01-',[A-MOUNT BY]))
     FROM  [table 1]