SQL:转换失败错误

时间:2017-09-25 13:59:53

标签: sql sql-server

我正在使用Microsoft SQL Server 2016(SP1-CU3)(KB4019916)。我的表格中包含数据类型为datetimedate的列。

我正在尝试使用此查询插入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))

有人可以帮我吗?

2 个答案:

答案 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类型)