我试图使用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
,但我仍然遇到同样的错误。
我该如何解决?
谢谢
答案 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]