2016-07-11 72 views
0

我的應用程序數據庫表JOB的數據類型爲varchar(16)(非常奇怪),但列存儲日期值,但是該列以類似yyyyddmm(eg- 19841511) ,yyyymmdd(例如 - 19841215),ddmmyyyy(例如 - 01012007)。具有數據ddmmyyyy到日期時間格式的SQL Server 2005 varchar

我只是想將數據轉換爲一個統一的日期時間格式,它是SQL Server 2005中是

yyyy-mm-dd 00:00:00.000 

你們可以幫我解決這問題出的默認日期時間格式?

在此先感謝!

+0

你打算如何確定「20121001」是什麼日期? – Squirrel

+0

那麼,假設它是01'Oct 2012,沒有選擇來查找是否是對的或錯誤的,這就是爲什麼我說各種任性的格式轉換爲1統一的日期時間字段,讓查詢數字出來。 – Sachin25

+0

可愛,日期格式不正確。我希望你知道哪些格式化的方式。 :/ –

回答

0

那麼,我希望你有一個系統的方法來知道哪個行以什麼方式存儲,因爲DATETIME沒有默認格式,並且您的字符串存儲格式錯誤... ,因爲在該格式不存在SQL中的。沒有外界的幫助,SQL無法知道。

  • 沒有日期格式化YYYY-DD-MM。看起來像定製工作。 :/
  • VARCHAR(16)也意味着你沒有任何秒DATETIME格式... ...好吧! :(

除非你事先知道哪些日期的格式是什麼,這將是幾乎是不可能的,而不必返回到被髮布這些「日期」源來排序了這一點。

SELECT CASE WHEN ISDATE('19841511') = 0 
     THEN SUBSTRING('19841511', 1, 4) + '-' --YEAR 
      + SUBSTRING('19841511', 7, 2) + '-' -- MONTH 
      + SUBSTRING('19841511', 5, 2) END AS [YYYY-MM-DD] 
    , CASE WHEN ISDATE('01012007') = 0 
     THEN SUBSTRING('01012007', 5, 4) + '-' --YEAR 
      + SUBSTRING('01012007', 3, 2) + '-' --MONTH 
      + SUBSTRING('01012007', 1, 2) END AS [YYYY-MM-DD] 

注意在兩種格式的區別...這兩種格式並不存儲在該SQL Server可識別的日期格式

  • DATETIME2不使用你正在尋找YYYY-MM-DD HH的默認格式:毫米:ss [。分數秒]

希望這至少能讓你朝着正確的答案!