2016-09-15 89 views
0

嗨,我創建了一個表,其中一列是date類型,也可以作爲PK。我試圖在此列中插入值2009-01-07並出現此錯誤。不是日期默認格式yyyy-mm-dd?我不明白這一點。日期類型和插入值的列

Msg 241, Level 16, State 1, Line 3 
Conversion failed when converting date and/or time from character string. 

這是我的查詢:

INSERT INTO Table_Name 
Values ('2009-01-07', other column values) 
+3

還有其他的事情正在進行,因爲''2009-01-07''可以作爲日期插入。嘗試創建一個全新的(表格和/或)列作爲日期,並查看是否可以插入到該列中。這聽起來好像你可能有一個觸發器或檢查約束調用一個函數或一些語言設置 - 或類似的 - 在表上失敗的價值工作。或者說,它是其他列值中的一個,當然不會。 –

+3

你可以編寫另一個_INSERT_查詢明確調用列的名稱嗎?例如:'INSERT INTO Table_Name(Date_PK,...)VALUES('2009-01-07',...)'。只是想確定哪個列引發異常。 '2009-01-07'應該可以。 –

+0

[在插入日期時間時從字符串轉換日期和/或時間時轉換失敗]的可能重複(http://stackoverflow.com/questions/14119133/conversion-failed-when-converting-date-and-or-time- from-character-string-while-i) – captainsac

回答

0

你的價值'2009-01-07'應轉換。

日期文字總是煩惱的深源...最好的是,爲使用

  • 未分離:20090107
  • ODBC:{D'2009-01-07' }
  • ISO8601 :2009-01-07T00:00:00

但您的格式是短ISO 8601和應該工作...

一些可能的原因:

  • 其他值在VALUES列表
  • 觸發
  • 約束
  • 作爲a_horse_with_no_name在評論中指出:如果沒有列清單INSERT INTO Table(col1, col2, ...)後有一個很大的風險以不同的順序陳述您的值,從而將值與錯誤的列配對...
  • 無效(但是好看)日期如2016-06-31

或者 - 衆所周知的 - 與SQL服務器的問題。有時執行的順序絕對不是人們所期望的。有幾個問題與轉換錯誤......

什麼,你可以嘗試

  • 使用ODBC格式(這被視爲DATETIME立即)
  • 聲明一個變量,這個值並把它放在地方
0

謝謝大家的及時回覆。我閱讀並嘗試了所有這些,並找出原因。

  1. 如果沒有CONSTRAINT有問題,可以將'2009-01-07'插入到「Date」作爲數據類型的列中;
  2. 我的問題是由該列上的CHECK約束引起的。 最初我設置CONSTRAINT爲 Column_Name ='Wednesday' 將其修改爲 DATEName(dw,[Column_Name])='Wednesday' 插入開始工作。

再次感謝。