Informix和DATE類型—一個有趣(複雜)的話題。事實上,從Informix世界來看,它非常簡單;當其他系統涉及不同的觀點時,應該怎麼做纔會變得棘手。
如果一切都正確設置(例如,在我的環境),你可以在Informix世界寫:
INSERT INTO tablename(daterequested) VALUES('2013-07-03');
而且你可以代替單引號雙引號,因爲Informix的是鬆懈的區別,除非你握着它的手,說:「當我使用雙引號時,我想大聲喊叫」。
更精心,你也可以這樣寫:
INSERT INTO tablename(daterequested) VALUES(DATETIME(2013-07-03) YEAR TO DAY);
這將工作,因爲(a)爲DATETIME格式固定在ISO 8601(日期/時間格式)或ISO 9075(SQL)格式( b)Informix將毫無疑問地從DATETIME YEAR TO DAY轉換爲DATE。這是可靠的,不像第一版本那樣依賴於任何環境變量設置或其他併發症。
你也可以可靠地寫入:
INSERT INTO tablename(daterequested) VALUES(MDY(7, 3, 2013));
這將使用功能MDY三個整數轉換爲一個日期;參數的順序是(記憶)月,日,年。這是可靠的,因爲它不依賴於環境變量。
第一個符號(使用字符串'2013-07-03'
)依賴於環境變量。經典變量是$DBDATE
;我在環境中設置了DBDATE=y4md-
,因此像'2013-07-03'
這樣的字符串被解釋爲ISO 9075.但是,對於美式日期,DBDATE的默認值實際上是DBDATE=mdy4/
。但是,還有其他一些變量,例如CLIENT_LOCALE,DB_LOCALE和GL_DATE都想要加入遊戲。我使用DBDATE是因爲它獲得最高優先級(並且從時間開始就已經完成),但是較新的(其他)變量有其優點。您還可以嘗試:
INSERT INTO tablename(daterequested) VALUES(DATE('07/03/2013'))
注意引號和括號。該字符串根據環境變量進行解釋。不要嘗試DATE(2013-07-03)
,因爲那相當於DATE(2003)
(2013減去7是2006; 2006 - 3是2003),因爲第1天是1900-01-01,2003年是1905-06-16,星期一。
SQL標準提供了DATE '2013-03-07'
,但Informix不支持無圓括號表示法。
您需要將SQL Server記法重新粘貼到SQL語法中,但MDY和DATETIME方法可以工作,並且如果您願意使用環境變量,則可以使DATE方法變爲可用狀態,或者修改日期字符串的格式以匹配預期的行爲。
Informix DBDATE環境變量的值是什麼? –