对于使用 SQL Server 2012 或更高版本的任何人,通过 FORMAT 函数很容易做到这一点,如下所示:
SET LANGUAGE 'English';
DECLARE @TestDate DATETIME;
SET @TestDate = '2015-06-23';
SELECT FORMAT(@TestDate, 'dddd'); -- Tuesday
SELECT FORMAT(@TestDate, 'dddd', 'en-us'); -- Tuesday
SELECT FORMAT(@TestDate, 'dddd', 'ru-RU'); -- вторник
SELECT FORMAT(@TestDate, 'dddd', 'fa-IR'); -- سه شنبه
SET LANGUAGE 'French';
SELECT FORMAT(@TestDate, 'dddd'); -- mardi
SELECT FORMAT(@TestDate, 'dddd', 'en-us'); -- Tuesday
SELECT FORMAT(@TestDate, 'dddd', 'ru-RU'); -- вторник
SELECT FORMAT(@TestDate, 'dddd', 'fa-IR'); -- سه شنبه
但是仍然使用 SQL Server 2005、2008 或 2008 R2 的人呢?好吧,同样可以使用 SQLCLR 完成。事实上,SQL Server 2012 中引入的FORMAT 函数(即上面显示的函数)在幕后使用了 SQLCLR。因此,您可以编写一个简单的 CLR UDF 来执行此操作,或者您可以简单地下载 SQL# 库(我是该库的作者,但此函数在免费版本中可用)并使用 Date_Format 函数,如此处显示:
SET LANGUAGE 'English';
DECLARE @TestDate DATETIME;
SET @TestDate = '2015-06-23';
SELECT SQL#.Date_Format(@TestDate, 'dddd', ''); -- Tuesday
SELECT SQL#.Date_Format(@TestDate, 'dddd', 'en-us'); -- Tuesday
SELECT SQL#.Date_Format(@TestDate, 'dddd', 'ru-RU'); -- вторник
SELECT SQL#.Date_Format(@TestDate, 'dddd', 'fa-IR'); -- سه شنبه
SET LANGUAGE 'French';
SELECT SQL#.Date_Format(@TestDate, 'dddd', ''); -- Tuesday (Windows lang, not SQL Server's)
SELECT SQL#.Date_Format(@TestDate, 'dddd', 'en-us'); -- Tuesday
SELECT SQL#.Date_Format(@TestDate, 'dddd', 'ru-RU'); -- вторник
SELECT SQL#.Date_Format(@TestDate, 'dddd', 'fa-IR'); -- سه شنبه
SQL# Date_Format 函数与内置 FORMAT 函数具有基本相同的签名,除了第三个参数(文化)不能在 SQLCLR 函数中省略,因此当不使用文化时,它需要设置为空字符串''。另一个区别是 SQLCLR 似乎不知道当前会话 LANGUAGE 设置,因此默认区域性是 Windows 设置的任何内容(但在这种特殊情况下这不是问题)。
附:有关更多格式选项,请参阅 Custom Date and Time Format Strings 的 MSDN 页面。