在报表生成器(SSRS)中获取本地时间月份名称
本文关键字:时间 获取 报表 SSRS | 更新日期: 2023-09-27 17:49:40
我写了这个SSRS
表达式来获取月份名称,它给出了英文月份名称,但我想获得当地时间或特定的文化月份名称(例如:塞尔维亚)。
如何在SSRS
中求解?
MonthName(Month(Today()))
我最初的想法是,你可以在获得月份名称之前使用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