我写了这个SSRS
表达式来获取月份名称,它用英语给出了月份名称,但是我希望得到本地时间或特定文化月份名称(例如塞尔维亚语)。
如何解决SSRS
?
MonthName(Month(Today()))
答案 0 :(得分:0)
我最初的原因是你可以在获取月份名称前使用SET LANGUAGE
来完成。
然而,事实证明Sql Server不支持塞尔维亚语(它至少在sys.syslanguages
不在Sql Server 2012中),所以你最好的选择是创建一个表或cte与本地化月份名称和数字,并使用它而不是MonthName
功能
的修改
实际上,表格会更好地为您服务,因为它只需要创建一次:
CREATE TABLE SerbianMonths (
SerbianMonths_Id int,
SerbianMonths_Name nvarchar(10)
)
INSERT INTO SerbianMonths VALUES
(1, N'јануар'),
(2, N'фебруар'),
(3, N'март'),
(4, N'април'),
(5, N'мај'),
(6, N'јун'),
(7, N'јул'),
(8, N'август'),
(9, N'септембар'),
(10, N'октобар'),
(11, N'новембар'),
(12, N'децембар')
(对不起,如果我的拼写错误,我已经从this website复制了
然后,您可以创建自己的用户定义函数,以便通过它获取月份名称:
CREATE FUNCTION GetSerbianMonthName
(
@MonthNumber int
)
RETURNS nvarchar(10)
AS
BEGIN
DECLARE @MonthName nvarchar(10)
SELECT @MonthName = SerbianMonths_Name
FROM SerbianMonths
WHERE SerbianMonths_Id = @MonthNumber
RETURN @MonthName
END
并像这样使用它:SELECT dbo.GetSerbianMonthName(2)
如果要使用更多不受支持的语言,可以在月份表中添加语言表和language_id列:
CREATE TABLE Languages
(
Language_Id int,
Language_Name nvarchar(100)
)
CREATE TABLE MonthNames
(
MonthNames_MonthNumber int, -- values from 1 to 12
MonthNames_LanguageId int, -- FK to languages table
MonthNames_Name nvarchar(100) -- the local month name
)
在MonthNumber和LanguageId上设置复合主键, 并从该表中选择语言ID:
CREATE FUNCTION GetMonthName
(
@Language_Id int,
@MonthNumber int
)
RETURNS nvarchar(10)
AS
BEGIN
DECLARE @MonthName nvarchar(100)
SELECT @MonthName = MonthNames_Name
FROM MonthNames
WHERE MonthNames_MonthNumber = @MonthNumber
AND MonthNames_LanguageId = @Language_Id
RETURN @MonthName
END