2015-02-11 65 views
0

我有一個varchar列,它表示以下格式的日期:「DDMMYYHHMMSS」。我這個VARCHAR轉換爲datetime這樣:使用自定義格式將SQL Server上的varchar轉換爲datetime

select * from myTable where getdate() >= convert(datetime, concat(case when substring(myDate, 5, 2) >= '0' and substring(myDate, 5, 2) <= '50' then 20 else 19 end, substring(myDate, 5, 2), '-', substring(myDate, 3, 2), '-', substring(myDate, 1, 2), ' ', substring(myDate, 7, 2), ':', substring(myDate, 9, 2), ':', substring(myDate, 11, 2)), 120) 

解釋:首先,我打破了VARCHAR分別得到所有的字段(日,月,年等)。然後,我將這些字段連接起來,爲SQL Server構建一個已知格式的varchar:「YYYY-MM-DD HH:MI:SS」。最後,我使用convert函數將varchar轉換爲格式爲120的datetime。在SQL的開頭有一個條件,我檢查2位數的年份以瞭解如何將其轉換爲4位數年份。

我想知道是否有更好的方法來編寫這個SQL。 (它與SQL Server 2005及更高版本一起使用)

在Oracle似乎更容易對我說:

sysdate >= to_date(myDate, 'DDMMYYHH24MISS') 

回答

3

如果你的SQL Server 2012或更高版本可以使用DATETIMEFROMPARTS (Transact-SQL)

declare @S varchar(12) = '100598101112'; 

select datetimefromparts(
         iif(substring(@S, 5, 2) <= 50, '20', '19') + substring(@S, 5, 2), 
         substring(@S, 3, 2), 
         substring(@S, 1, 2), 
         substring(@S, 7, 2), 
         substring(@S, 9, 2), 
         substring(@S, 11, 2), 
         0 
         ); 
+0

謝謝。但我忘了提及到2005年之前我必須保持與舊版SQL Server的兼容性。 – 2015-02-11 15:09:02

相關問題