在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
相同的自由?最好不要求我创建自定义函数。
答案 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页面详细介绍了可用的格式选项: