我正在使用Microsoft SQL Server 2016(SP1-CU3)(KB4019916)。我的表格中包含数据类型为datetime
和date
的列。
我正在尝试使用此查询插入datetime
值,但我一直收到错误
从字符串转换日期和/或时间时转换失败。
我的代码:
INSERT INTO [mytable] ([Date1], [Date2], [Date3])
VALUES (CONVERT(DATETIME, '2017-09-22 20:31:48.000', 126),
CONVERT(DATE, '2017-09-22', 126),
CONVERT(DATETIME, '2017-09-23 04:07:46.000')
我已经尝试了转换以及转换并仍然得到相同的错误。
INSERT INTO [mytable]([Date1], [Date2], [Date3])
VALUES
(CAST('2017-09-22 20:31:48.000' AS DATETIME),
CAST('2017-09-22' AS DATE),
CAST('2017-09-23 04:07:46.000' AS DATETIME))
有人可以帮我吗?
答案 0 :(得分:1)
你的表架构是什么样的?我在这些方面做了些什么?
CREATE TABLE dbo.myTable
(
Date1 DATETIME
,Date2 DATE
,Date3 DATETIME
)
您的第一个示例(使用CONVERT)与DateTimes失败,因为您使用的样式是126,期望DateTime中没有空格(例如2017-09-22T20:31:48.000)。在上面的模式中,您的第二个插入(使用CAST)成功。
INSERT INTO dbo.myTable
(
Date1,Date2,Date3
)
VALUES
(CAST('2017-09-22 20:31:48.000' AS datetime ),CAST('2017-09-22' AS datetime),CAST('2017-09-23 04:07:46.000' AS datetime ))
要纠正您的第一个示例(使用CONVERT),您只需取出126样式即可顺利运行。
CONVERT(DATETIME, '2017-09-22 20:31:48.000')
答案 1 :(得分:1)
为此使用语言中性格式,因此您确定它可以在任何SQL Server上运行。 有关详细信息,请参阅此处http://karaszi.com/the-ultimate-guide-to-the-datetime-datatypes
语言中性格式的一个例子就是这个
select CONVERT(datetime, '20170922 20:31:48')
这将适用于任何sql server数据库,无论其语言设置如何。
此外,您的意图也不需要转换 你可以像这样写:
INSERT INTO [mytable]
( [Date1], [Date2], [Date3] )
Values
( '20170922 20:31:48', '20170922', '20170923 04:07:46' )
这确实假定Date1,Date2和Date3的类型为DateTime或DateTime2(Date2也可以是Date类型)