как конвертировать дату месяца из int в varchar? - PullRequest
0 голосов
/ 15 февраля 2012

Я хотел бы спросить, как преобразовать целое число в имя месяца в SQL Server 2005. Пример В моем поле 01-12, я хотел бы отображать как январь - декабрь.

кто-нибудь может мне помочь?

Ответы [ 6 ]

2 голосов
/ 15 февраля 2012
SELECT MonthName =
  CASE month
     WHEN 1 THEN 'January'
     WHEN 2 THEN 'February'
     WHEN 3 THEN 'March'
     WHEN 4 THEN 'April'
     WHEN 5 THEN 'May'
     WHEN 6 THEN 'June'
     WHEN 7 THEN 'July'
     WHEN 8 THEN 'August'
     WHEN 9 THEN 'September'
     WHEN 10 THEN 'October'
     WHEN 11 THEN 'November'
     WHEN 12 THEN 'December'
     ELSE 'What kind of calendar is it?'
  END

См. Также:

1 голос
/ 15 февраля 2012

Для использования в хранимой процедуре SQL вы можете использовать это

SELECT DATENAME (month, DATEADD (month, @ mydate-1, CAST ('2008-01-01' AS datetime)))

где @mydate может быть 1,2,3 ...

1 голос
/ 15 февраля 2012

В C # мы можем использовать для полного имени месяца, например, январь-декабрь

Date.ToString ("MMMM")

для jan-dec вы можете использовать

Date.ToString ("MMM")

0 голосов
/ 15 февраля 2012
CREATE FUNCTION dbo.[MonthName] (@monthNum int)
    RETURNS varchar(30)
AS
BEGIN
    RETURN
        CASE WHEN @monthNum BETWEEN 1 AND 12
            THEN DATENAME(MONTH, DATEADD(MONTH, @monthNum, '2000-12-01'))
            ELSE NULL
        END
END
0 голосов
/ 15 февраля 2012

Я не уверен, что вам не нравится в других ответах (что означает «я предпочитаю динамический код»?), Но поскольку вы используете базу данных, самое простое решение - сохранить имена в таблице.Затем вы можете легко добавить больше столбцов в будущем, если вы хотите поддерживать названия месяцев на нескольких языках, например.

Если вы много работаете с датами, лучшее решение из всех - создать полную календарная таблица (вы можете найти множество обсуждений о них на этом сайте), потому что тогда вы можете хранить столько имен или других атрибутов, сколько вам нужно на определенную дату, без использования какого-либо кода вообще.

0 голосов
/ 15 февраля 2012

Как насчет этого, вы создаете одну функцию sclar.

CREATE FUNCTION dbo.ConvertMonthName
(
    -- Add the parameters for the function here
    @m      nvarchar(2)
)
RETURNS varchar(20)
AS
BEGIN
    -- Declare the return variable here
    DECLARE @result varchar(20)

    DECLARE @MNO INT
    SET @MNO = CAST(@M AS INT)

    -- Add the T-SQL statements to compute the return value here
    if(@m = 1)
        SET @result = 'JANUARY'
    else if(@m = 2)
        SET @result = 'FEBRUARY'
    else if(@m = 3)
        SET @result = 'MARCH'
    else if(@m = 4)
        SET @result = 'APRIL'
    else if(@m = 5)
        SET @result = 'MAY'
    else if(@m = 6)
        SET @result = 'JUNE'
    else if(@m = 7)
        SET @result = 'JULY'
    else if(@m = 8)
        SET @result = 'AUGUST'
    else if(@m = 9)
        SET @result = 'SEPTEMBER'
    else if(@m = 10)
        SET @result = 'OCTOBER'
    else if(@m = 11)
        SET @result = 'NOVEMBER'
    else if(@m = 12)
        SET @result = 'DECEMBER'



    RETURN @result

END

- из вашего sql скрипта

DECLARE @VAR VARCHAR(5)
SET @VAR = '01-12'

SELECT dbo.ConvertMonthName(LEFT(@VAR,2)) + ' - ' + dbo.ConvertMonthName(RIGHT(@VAR,2)) [colname]
...