Повернення імені місяця в запиті SQL Server


81

Використовуючи SQL Server 2008, у мене є запит, який використовується для створення подання, і я намагаюся відобразити назву місяця замість цілого числа.

У моїй базі даних datetimeце стовпець називається OrderDateTime. Рядки в запиті, що повертають дату:

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

Це повертає стовпець років і стовпець місяців як цілі числа. Я хочу повернути назви місяців (Jan, Feb, etc). Я пробував:

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

Очевидно, це неправильно, як я розумію

Неправильний синтаксис біля "AS"

повідомлення. Який правильний синтаксис для мого запиту?


8
ASCONVERT(varchar(3), DATEPART(MONTH, S0.OrderDateTime)) AS OrderMonth
Помилка

Що означає S0 у запиті sql
user7157710

@ user7157710 S0 - це псевдонім, наданий таблиці, де знаходиться поле.
tia97

Відповіді:


155

Це дасть вам повну назву місяця.

select datename(month, S0.OrderDateTime)

Якщо вам потрібні лише перші три літери, ви можете використовувати це

select convert(char(3), S0.OrderDateTime, 0)

Коментар неправильно розміщений у відповіді "Що означає S0 у запиті sql?" по user7157710
Petter Friberg

1
S0 - псевдонім для таблиці. Відповідь переноситься із запитання.
Bpainter

Я хотів би додати, що, як правило, ви навіть не хочете використовувати ці функції. Вам краще вибрати дату як дату (час) або місяць як ціле число чи інше, а потім дозволити своєму інтерфейсу подбати про "перетворення" його в зручну для людини назву місяця. Таким чином ваш додаток / користувальницький інтерфейс може піклуватися про локалізацію, а не про вашу базу даних, яка не має жодного уявлення про уподобання користувача чи налаштування програми для локалізації. По-іншому, подумайте про це так: а що, якщо ваш користувач віддає перевагу китайській мові 二月 перед лютим?
РобІІІ


12

Зміна:

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

Кому:

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

Гадаю, ти маєш на увазі DATENAME. DATEPARTне зробив би цього.
Друїд






0

Не натискаючи db, ми можемо отримати назву за всі місяці.

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

0

в основному це ...

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)


0

для мене DATENAME був недоступний через обмеження компанії .... але це теж працювало дуже легко.

FORMAT(date, 'MMMM') AS month
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.