在报表生成器(SSRS)中获取本地时间月份名称

本文关键字:时间 获取 报表 SSRS | 更新日期: 2023-09-27 17:49:40

我写了这个SSRS表达式来获取月份名称,它给出了英文月份名称,但我想获得当地时间或特定的文化月份名称(例如:塞尔维亚)。

如何在SSRS中求解?

MonthName(Month(Today()))

在报表生成器(SSRS)中获取本地时间月份名称

我最初的想法是,你可以在获得月份名称之前使用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'децембар')

(对不起,如果我拼写错误,我从这个网站复制)

然后您可以创建您自己的用户定义函数来根据月份的数字获取月份名称:

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添加到select表中:

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