Konwertuj numer miesiąca na nazwę miesiąca funkcja w SQL

Mam miesiące przechowywane w SQL Server jako 1,2,3,4,...12. Chciałbym je wyświetlać jako Styczeń, Luty itp. Czy istnieje funkcja w SQL Server jak MonthName (1) = January? Staram się unikać zeznań, jeśli to możliwe.

Author: abatishchev, 2008-10-09

29 answers

Trochę hacky ale powinno działać:

SELECT DATENAME(month, DATEADD(month, @mydate-1, CAST('2008-01-01' AS datetime)))
 144
Author: Alexander Kojevnikov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-09 01:03:33

Myślę, że jest to najlepszy sposób, aby uzyskać nazwa miesiąca Gdy masz numer miesiąca

Select DateName( month , DateAdd( month , @MonthNumber , 0 ) - 1 )

Lub

Select DateName( month , DateAdd( month , @MonthNumber , -1 ) )
 221
Author: leoinfo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-15 15:14:48
SELECT DATENAME(month, GETDATE()) AS 'Month Name'
 84
Author: Dharamvir,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-11-21 21:05:50
SUBSTRING('JAN FEB MAR APR MAY JUN JUL AUG SEP OCT NOV DEC ', (@intMonth * 4) - 3, 3)
 61
Author: Darryl Martin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-11-21 21:06:22

Użyj najlepszego sposobu

Select DateName( month , DateAdd( month , @MonthNumber , -1 ))
 29
Author: Asif,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-18 09:50:19

To bardzo proste.

select DATENAME(month, getdate())

Wyjście : Styczeń

 18
Author: Saeed ur Rehman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-26 14:40:30

Dla mnie działa:

CAST (GETDATE () AS CHAR (3))

 6
Author: unitario,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-02-26 12:17:14

Oprócz oryginału

SELECT DATENAME(m, str(2) + '/1/2011')

Możesz to zrobić

SELECT DATENAME(m, str([column_name]) + '/1/2011')

W ten sposób otrzymujesz nazwy wszystkich wierszy w tabeli. gdzie [column_name] reprezentuje kolumnę całkowitą zawierającą wartość liczbową od 1 do 12

2 reprezentuje dowolną liczbę całkowitą, za pomocą ciągu kontaktowego utworzyłem datę, w której mogę wyodrębnić miesiąc. '/1 / 2011 ' może być dowolną datą

Jeśli chcesz to zrobić ze zmienną

DECLARE @integer int;

SET @integer = 6;

SELECT DATENAME(m, str(@integer) + '/1/2011')
 5
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-09-20 15:11:57

W niektórych lokalizacjach, takich jak Hebrajski, istnieją miesiące przestępne zależne od roku, więc aby uniknąć błędów w takich lokalizacjach, można rozważyć następujące rozwiązanie:

SELECT DATENAME(month, STR(YEAR(GETDATE()), 4) + REPLACE(STR(@month, 2), ' ', '0') + '01')     
 4
Author: Jim Burger,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-09 01:15:31

Możesz użyć wbudowanej funkcji CONVERT

select CONVERT(varchar(3), Date, 100)  as Month from MyTable.

To wyświetli pierwsze 3 znaki miesiąca (Styczeń, Luty itp..)

 4
Author: Marcus,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-11-21 21:05:33

Użyj tej Instrukcji, Aby przekonwertować wartość liczbową miesiąca na nazwę miesiąca.

SELECT CONVERT(CHAR(3), DATENAME(MONTH, GETDATE()))
 4
Author: Ashish Singh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-02-23 10:09:32

Możesz użyć funkcji convert jak poniżej

CONVERT(VARCHAR(3), DATENAME(MM, GETDATE()), 100)
 3
Author: Nori,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-11-21 21:05:45

To na pewno zadziała --select datename (m, GETDATE ())

 3
Author: Shyam Sa,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-07-05 09:55:49

Po prostu odjmij bieżący miesiąc od dzisiejszej daty, a następnie dodaj swój numer miesiąca. Następnie użyj funkcji datename, aby podać pełną nazwę WSZYSTKICH w 1 linii.

print datename(month,dateadd(month,-month(getdate()) + 9,getdate()))
 3
Author: Geoffrey Fuller,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-29 21:41:26

Myślę, że to wystarczy, aby uzyskać nazwę miesiąca, gdy masz datę.

SELECT DATENAME(month ,GETDATE())
 2
Author: Benazir,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-10-04 09:33:40

Aby przekonwertować numer miesiąca na nazwę miesiąca, wypróbuj poniższą metodę

declare @month smallint = 1
select DateName(mm,DATEADD(mm,@month - 1,0))
 2
Author: M2012,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-06 12:46:33

Ten u mnie zadziałał:

@MetricMonthNumber (some number)

SELECT 
(DateName( month , DateAdd( month , @MetricMonthNumber - 1 , '1900-01-01' ) )) AS MetricMonthName
FROM TableName

Z postu powyżej od @ leoinfo i @ Valentino Vranken. Po prostu zrobiłem szybki wybór i działa.

 1
Author: Roadrunner327,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-08-05 23:20:16
Declare @MonthNumber int
SET @MonthNumber=DatePart(Month,GETDATE())
Select DateName( month , DateAdd( month , @MonthNumber , 0 ) - 1 )

Wyjaśnienie:

  1. Pierwsza Zmienna Kalkomanii MonthNumber
  2. Get Current Month for DatePart which Return Month Number
  3. Third Query Return Month Name
 1
Author: Wafa Abbas,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-07-20 07:20:53

SELECT DATENAME(MONTH,dateadd (month, -3,getdate ()))

 1
Author: gvila,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-05-09 13:45:10
select monthname(curdate());

Lub

select monthname('2013-12-12');
 1
Author: Piyush,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-12-14 05:40:52

Working for me

SELECT MONTHNAME(<fieldname>) AS "Month Name" FROM <tablename> WHERE <condition>
 1
Author: Kashif Aslam,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-12-14 13:47:11
SELECT DateName(M, DateAdd(M, @MONTHNUMBER, -1))
 1
Author: Isaiah,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-04-28 21:12:11

/ Align = "left" / np: - Users table

id name created_at
1  abc  2017-09-16
2  xyz  2017-06-10

Możesz uzyskać nazwę miesiąca w następujący sposób

select year(created_at), monthname(created_at) from users;

Wyjście

+-----------+-------------------------------+
| year(created_at) | monthname(created_at)  |
+-----------+-------------------------------+
|      2017        | september              |
|      2017        | june                   |
 1
Author: Janaka Pushpakumara,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-22 06:04:04

Użyj tej Instrukcji, Aby uzyskać nazwę miesiąca:

DECLARE @date datetime
SET @date='2015/1/4 00:00:00'

SELECT CAST(DATENAME(month,@date )  AS CHAR(3))AS 'Month Name'

To da ci krótką nazwę miesiąca. Jak to: Styczeń, Luty, Marzec itp.

 0
Author: user4972370,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-04 06:15:58

Oto moje rozwiązanie wykorzystujące niektóre informacje od innych do rozwiązania problemu.

datename(month,dateadd(month,datepart(month,Help_HelpMain.Ticket_Closed_Date),-1)) as monthname
 0
Author: lancepants28,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-24 15:58:21

W SQL serverze nie ma funkcji zdefiniowanej przez system. Ale możesz utworzyć własną funkcję zdefiniowaną przez użytkownika-funkcję skalarną. Funkcje skalarne znajdziesz w Eksploratorze obiektów dla twojej bazy danych: programowalność - > Funkcje->Funkcje skalarne. Poniżej, używam zmiennej tabeli, aby połączyć to wszystko razem.

--Create the user-defined function
CREATE FUNCTION getmonth (@num int)
RETURNS varchar(9) --since 'September' is the longest string, length 9
AS
BEGIN

DECLARE @intMonth Table (num int PRIMARY KEY IDENTITY(1,1), month varchar(9))

INSERT INTO @intMonth VALUES ('January'), ('February'), ('March'), ('April'), ('May')
                           , ('June'), ('July'), ('August') ,('September'), ('October')
                           , ('November'), ('December')

RETURN (SELECT I.month
        FROM @intMonth I
        WHERE I.num = @num)
END
GO

--Use the function for various months
SELECT dbo.getmonth(4) AS [Month]
SELECT dbo.getmonth(5) AS [Month]
SELECT dbo.getmonth(6) AS [Month]
 0
Author: Charlie Brown,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-16 21:58:44

Począwszy od SQL Server 2012, możesz użyć formatu I DATEFROMPARTS, aby rozwiązać ten problem.

select FORMAT(DATEFROMPARTS(1900, @month_num, 1), 'MMMM', 'en-US')

Jeśli chcesz trzyliterowy miesiąc:

select FORMAT(DATEFROMPARTS(1900, @month_num, 1), 'MMM', 'en-US')

Jeśli naprawdę chcesz, możesz utworzyć dla tego funkcję:

CREATE FUNCTION fn_month_num_to_name
(
    @month_num tinyint
)
RETURNS varchar(20)
AS
BEGIN
    RETURN FORMAT(DATEFROMPARTS(1900, @month_num, 1), 'MMMM', 'en-US')
END
 0
Author: Paul,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-22 14:27:48
to_char(to_date(V_MONTH_NUM,'MM'),'MONTH')

Gdzie V_MONTH_NUM to numer miesiąca

SELECT to_char(to_date(V_MONTH_NUM,'MM'),'MONTH')  from dual;
 -1
Author: shailesh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-10-11 09:37:31

Użyj tego stwierdzenia

SELECT TO_CHAR(current_date,'dd MONTH yyyy') FROM dual

To przekonwertuje numer miesiąca na pełny łańcuch miesiąca

 -2
Author: Cedricve,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-11-21 21:06:08