【问题标题】:Covert number month to name of the month [duplicate]将数字月份转换为月份名称[重复]
【发布时间】:2018-05-15 09:36:24
【问题描述】:

如何将包含月份数的列转换为月份名称?

例如:

我有月份列,它有 7,7,8,9 但我希望它显示为 7 月、7 月、8 月、9 月。

【问题讨论】:

  • 请添加一些您到目前为止尝试过的代码示例。
  • 该列是否包含逗号分隔值,例如 7,7,8,9
  • 如果@EzLo 链接到的答案没有给出您期望的结果,它给出了什么?

标签: sql-server


【解决方案1】:

试试这个...

DECLARE @MonthNumber int
SET @MonthNumber = 1

SELECT DATENAME(MONTH, DATEADD(MONTH, @MonthNumber, '2017/12/31')) AS 'Month'

或者

SELECT DATENAME(MONTH, DATEADD(MONTH, yourColumnHere, '2017/12/31')) AS 'Month'

【讨论】:

  • datename 的第二个参数是日期,而不是整数
  • @Andomar,谢谢。已更新。
【解决方案2】:

如果该列包含月份数字的 CSV,那么试试这个 (SQL_Server 2016)

DECLARE @t TABLE (
    Months_csv  NVARCHAR (15)
);
INSERT INTO @t
(
    Months_csv
)
VALUES
(
    N'7,7,8,9'
);

SELECT
    value
    ,[MonthName]=DATENAME(MONTH, DATEADD(MONTH, CAST(value AS INT), -1))
FROM
    @t  T
CROSS APPLY
    STRING_SPLIT(T.Months_csv, ',');

输出

value   MonthName
7       July
7       July
8       August
9       September

如果不是 CSV 列表,那么试试这个

DECLARE @t TABLE (
    Months_ int
);
INSERT INTO @t
(
    Months_
)
VALUES
(7),(7),(8),(9);

SELECT
    T.Months_
    ,[MonthName]=DATENAME(MONTH, DATEADD(MONTH, T.Months_, -1))
FROM
    @t  T

输出

Months_ MonthName
7       July
7       July
8       August
9       September

【讨论】:

    【解决方案3】:

    使用这个 Udf

    CREATE FUNCTION [dbo].[udf_GetMonthNAME]
    (
    @string nvarchar(max)
    )
    RETURNS  @OutTable TABLE
    (
    MonthNames nvarchar(max)
    )
    AS
    BEGIN
    
        DECLARE @Temp AS TABLE
        (
        MonthNumber nvarchar(max)
        )
        INSERT INTO @Temp
        SELECT @string
    
    
        INSERT INTO @OutTable(MonthNames)
        SELECT STUFF((SELECT ', '+MonthNumber 
            FROM
            (
            SELECT DATENAME(MONTH,DATEADD(MONTH,MonthNumber-5,Getdate())) AS MonthNumber
            FROM
            (
            SELECT CAST(Split.a.value('.','nvarchar(max)') AS INT) AS MonthNumber
            FROM
            (
            SELECT CAST('<S>'+REPLACE(MonthNumber,',','</S><S>')+'</S>' AS XML ) AS MonthNumber
            FROM @Temp
            )AS A
            CROSS APPLY MonthNumber.nodes('S') AS Split(a)
            )fn
            )fnl FOR XML PATH ('')),1,1,'')
    
    
    RETURN
    END
    
    SELECT * FROM [dbo].[udf_GetMonthNAME] ('7,7,8,9')
    GO
    

    结果

    MonthNames
    --------------
     July, July, August, September
    

    【讨论】:

      猜你喜欢
      • 2011-06-04
      • 1970-01-01
      • 1970-01-01
      • 2011-06-04
      • 1970-01-01
      • 2012-08-07
      • 1970-01-01
      • 2010-09-16
      • 1970-01-01
      相关资源
      最近更新 更多