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

时间:2015-05-19 13:07:36

标签: c# reporting-services reportbuilder

我写了这个SSRS表达式来获取月份名称,它用英语给出了月份名称,但是我希望得到本地时间或特定文化月份名称(例如塞尔维亚语)。

如何解决SSRS

MonthName(Month(Today()))

1 个答案:

答案 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
相关问题