Zwracająca nazwa miesiąca w kwerendzie SQL Server

81

Używając SQL Server 2008, mam zapytanie, które jest używane do tworzenia widoku i próbuję wyświetlić nazwę miesiąca zamiast liczby całkowitej.

W mojej bazie danych datetimeznajduje się w kolumnie o nazwie OrderDateTime. Wiersze w zapytaniu zwracające datę to:

DATENAME(yyyy, S0.OrderDateTime) AS OrderYear,
DATEPART(MONTH, S0.OrderDateTime) AS OrderMonth

Zwraca kolumnę lat i kolumnę miesięcy jako liczby całkowite. Chcę zwrócić nazwy miesięcy (Jan, Feb, etc). Próbowałem:

CONVERT(varchar(3), DATEPART(MONTH, S0.OrderDateTime) AS OrderMonth

Jak rozumiem, jest to oczywiście nieprawidłowe

Nieprawidłowa składnia w pobliżu „AS”

wiadomość. Jaka jest prawidłowa składnia mojego zapytania?

Casey DiBroaggio
źródło
8
Niepoprawna składnia jest spowodowana ASCONVERT(varchar(3), DATEPART(MONTH, S0.OrderDateTime)) AS OrderMonth
niezamknięciem
Co oznacza S0 w zapytaniu sql
user7157710
@ user7157710 S0 to alias nadany tabeli, w której znajduje się pole.
tia97

Odpowiedzi:

155

W ten sposób otrzymasz pełną nazwę miesiąca.

select datename(month, S0.OrderDateTime)

Jeśli chcesz tylko pierwsze trzy litery, możesz użyć tego

select convert(char(3), S0.OrderDateTime, 0)
Mikael Eriksson
źródło
Komentarz niepoprawnie zamieszczony w odpowiedzi "Co oznacza S0 w zapytaniu sql?" autor: user7157710
Petter Friberg
1
S0 jest aliasem tabeli. Odpowiedź przenosi to z pytania.
Bpainter
Chciałbym dodać, że zazwyczaj nie chcesz nawet korzystać z tych funkcji. Lepiej jest wybrać datę jako datę (czas) lub miesiąc jako liczbę całkowitą lub cokolwiek, a następnie pozwól, aby Twój interfejs użytkownika zajął się `` konwersją '' go na przyjazną dla człowieka nazwę miesiąca. W ten sposób aplikacja / interfejs użytkownika może zająć się lokalizacją, a nie bazą danych, co nie ma najmniejszego pojęcia o preferencjach użytkownika ani ustawieniach aplikacji dotyczących lokalizacji. Ujmując to inaczej, pomyśl o tym w ten sposób: a co, jeśli twój użytkownik woli chiński 二月 od lutego?
RobIII
18

Czy próbowałeś DATENAME(MONTH, S0.OrderDateTime)?

nithins
źródło
12

Zmiana:

CONVERT(varchar(3), DATEPART(MONTH, S0.OrderDateTime) AS OrderMonth

Do:

CONVERT(varchar(3), DATENAME(MONTH, S0.OrderDateTime)) AS OrderMonth
Jim Harris
źródło
Myślę, że masz na myśli DATENAME. DATEPARTnie zrobiłbym tego.
Druid
7

Spróbuj tego:

SELECT LEFT(DATENAME(MONTH,Getdate()),3)
Jeyaprakash
źródło
2

Wybierz SUBSTRING (convert(varchar,S0.OrderDateTime,100),1,3)nazwę stołu

Dilip Chauhan
źródło
2

W SQL Server 2012 można użyć FORMAT(@mydate, 'MMMM') AS MonthName

Marlon Taborda
źródło
1

To da ci to, o co prosisz:

select convert(varchar(3),datename(month, S0.OrderDateTime)) 
Bamidelz
źródło
1
SELECT MONTHNAME( `col1` ) FROM `table_name` 
alvin
źródło
0

Bez wciskania db możemy pobrać nazwy wszystkich miesięcy.

WITH CTE_Sample1 AS
(
    Select 0 as MonthNumber

    UNION ALL

    select MonthNumber+1 FROM CTE_Sample1
        WHERE MonthNumber+1<12
)

Select DateName( month , DateAdd( month , MonthNumber ,0 ) ) from CTE_Sample1
Mou
źródło
0

w zasadzie to ...

declare @currentdate datetime = getdate()
select left(datename(month,DATEADD(MONTH, -1, GETDATE())),3)
union all
select left(datename(month,(DATEADD(MONTH, -2, GETDATE()))),3)
union all
select left(datename(month,(DATEADD(MONTH, -3, GETDATE()))),3)
odcinki
źródło
0
DECLARE @iMonth INT=12
SELECT CHOOSE(@iMonth,'JANUARY','FEBRUARY','MARCH','APRIL','MAY','JUNE','JULY','AUGUST','SEPTEMBER','OCTOBER','NOVEMBER','DECEMBER')
Natarajan Sambantham
źródło
0

dla mnie DATENAME nie był dostępny z powodu ograniczeń firmy ... ale to też działało bardzo łatwo.

FORMAT(date, 'MMMM') AS month
Mitharidas
źródło