簡體   English   中英

在報告生成器(SSRS)中獲取本地時間月份名稱

[英]Get Local Time Month Name in report builder (SSRS)

我寫了這個SSRS表達式來獲取月份名稱,它用英語給出了月份名稱,但是我想獲取本地時間或特定文化月份的名稱(例如塞爾維亞語)。

如何解決SSRS

MonthName(Month(Today()))

我最初的想法是,您可以在獲取月份名稱之前使用SET LANGUAGE進行SET LANGUAGE

但是,事實證明Sql Server不支持塞爾維亞語言(至少在Sql Server 2012中不是sys.syslanguages ),因此,最好的選擇是使用本地化的月份名稱和數字創建表或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添加到此表中的選擇中:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM