有没有办法在SQL Server中使用自定义格式获取日期?

时间:2011-11-20 14:42:38

标签: sql sql-server tsql

在Oracle中,您可以使用:

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 :(得分:3)

目前最好的选择是拥有一个CLR function,它是.NET DateTime.ToString(string format)的包装。

如果您不想使用单独的函数,可以从片段构建所需的字符串:

YEAR(@d) + '-' + MONTH(@d) + '-' + DAY(@d)

对于明确的解决方案,SQL Server的下一个版本中将有a formatting function

答案 1 :(得分:0)

这取决于您使用的SQL Server版本。

SQL Server 2005,2008和2008 R2

对于这些版本,您需要使用SQLCLR从.NET公开该功能。您可以使用DateTime类编写自己的SQLCLR函数(如@ GSerg' s 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页面详细介绍了可用的格式选项: