2011-11-20 65 views
1

在Oracle中,你可以使用:有沒有辦法在SQL Server中獲取自定義格式的日期?

SELECT to_char(sysdate, 'yyyy-mm') FROM dual; 

只顯示一個日期的年份和月份部分。此外,您可以設置NLS_DATE_FORMAT來更改默認情況下返回日期的方式。

我知道在SQL Server你有一個set of predefined options你可以使用:

SELECT convert(varchar, getdate(), 110) –- mm-dd-yyyy 
SELECT convert(varchar, getdate(), 111) –- yyyy/mm/dd 

但有這給了我同樣的自由Oracle的to_char的選項?最好不要求我創建自定義函數。

+2

有很多的智慧,讓有關數據你的數據庫的擔心。數據不包括格式 - 這是應用程序層關注的問題。含義;數據庫根本就不是最好的地方。 –

+0

@MarcGravell我正在使用SQL腳本,沒有應用程序層。 – Aillyn

+1

@MarcGravell我也曾這麼想過。然後我需要從我的SQL Server函數中返回一個XML文檔,此時根據XML表示的外部規範格式化日期變成了純粹的服務器端任務。 – GSerg

回答

0

這取決於您正在使用的SQL Server版本。

SQL Server 2005中,2008和2008 R2

對於這些版本中,你將需要利用SQLCLR的暴露從.NET該功能。您可以使用DateTime類編寫您自己的SQLCLR函數(如@ GSerg的answer中所述),或者您可以簡單地下載並安裝免費版的SQL#(我是作者,但Date_Format函數是免費的) 。

例子:

SELECT SQL#.Date_Format(GETDATE(), 'dddd in MMMM', '') AS [Default_language], 
     SQL#.Date_Format(GETDATE(), 'dddd in MMMM', 'he') AS [Hebrew], 
     SQL#.Date_Format(GETDATE(), 'dddd in MMMM', 'de') AS [German]; 

返回:

Default_language  Hebrew    German 
Monday in January  יום שני in ינואר Montag in Januar 

的SQL Server 2012和更新

使用內置FORMAT功能。

例子:

SELECT FORMAT(GETDATE(), 'dddd in MMMM') AS [Default_language], 
     FORMAT(GETDATE(), 'dddd in MMMM', 'he') AS [Hebrew], 
     FORMAT(GETDATE(), 'dddd in MMMM', 'de') AS [German]; 

返回:

Default_language  Hebrew    German 
Monday in January  יום שני in ינואר Montag in Januar 

對於這兩種SQLCLR和內置FORMAT選項

以下兩個MSDN頁詳細可用的格式選項:

相關問題