2017-09-25 112 views
0

我正在使用Microsoft SQL Server 2016(SP1-CU3)(KB4019916)。我有一個數據類型爲datetimedate的列表。SQL:轉換失敗錯誤

我想插入使用此查詢的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

日期時間值的格式在你的varchar字符串中可能是你錯誤的原因。選擇一種語言中性格式,以便任何sql服務器都能理解它。看到這裏http://www.karaszi.com/SQLServer/info_datetime.asp#DtFormatsInput – GuidoG

回答

0

什麼是你的表格模式?我正在假設沿着這些線?

CREATE TABLE dbo.myTable 
(
    Date1 DATETIME 
    ,Date2 DATE 
    ,Date3 DATETIME 
) 

你的第一個例子(使用CONVERT)與DateTime是否失敗,因爲你使用的風格是126預計沒有空格的日期時間(例如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') 
0

爲此使用中性語言格式,所以您確定它可以在任何sql服務器上工作。 看到這裏獲取更多信息http://www.karaszi.com/SQLServer/info_datetime.asp#DtFormatsInput

中性語言格式的例子是這樣的

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') 

這並假定日期1,日期2和DATE3是DateTime類型或DATETIME2的(日期2也可以是類型日期)