Отримання лише місяця та року від DQL SQL


133

Мені потрібно отримати доступ лише до Month.Year від поля Date в SQL Server.

Відповіді:


170

Окрім запропонованих пропозицій, є ще одна можливість, яку я можу зробити з вашого запитання:
- Ви все ще хочете, щоб результат був датою,
- але ви хочете "відкинути" Дні, Години тощо
- Залишаючи рік / місяць єдине поле дати

SELECT
   DATEADD(MONTH, DATEDIFF(MONTH, 0, <dateField>), 0) AS [year_month_date_field]
FROM
   <your_table>

Це отримує кількість цілих місяців від базової дати (0), а потім додає їх до цієї базової дати. Таким чином, округлюючи вниз до місяця, в якому дата знаходиться.

ПРИМІТКА: У SQL Server 2008, ви все одно будете додавати TIME як 00: 00: 00.000 Це не зовсім те саме, що "видалення" будь-яких позначень дня та часу взагалі. Також ДЕНЬ встановлений на перший. наприклад 2009-10-01 00: 00: 00.000


1
Для мене це зовсім не спрацювало. Це дає мені 2023-02-01 00: 00: 00.000 як результат.
Dss

1
@dss - з якими параметрами? Покажіть фактичний SQL, і я радий подивитися.
MatBailie

@MatBailie SELECT DATEADD (MONTH, DATEDIFF (MONTH, 0, LastSaleDate), 0) AS [year_month_date_field] FROM db1.products where productID = 123 Стовпець "LastSaleDate" оголошується як "(datetime, not null)", і я отримую: 2014-09-01 00: 00:
00.000

1
@DSS - Так, це здається правильним. Він завершується до самого початку вересня 2014 року. Немає типу даних "Лише рік та місяць", тому використання першого моменту кожного місяця є стандартною практикою. Перетворюючи це значення DATETIME в рядок (Шар додатку, Шлях презентації, Шар звітів тощо), ви завжди можете вибрати його форматування лише з частинами року та місяця. Але з точки зору маніпулювання даними "в базі даних" це правильно.
MatBailie

Я думаю, можливо тому, що ваша відповідь мала бути використана з полем "Дата", але я використовую поле "Дата", так що це, мабуть, проблема.
Dss

133
select month(dateField), year(dateField)

2
чудово! Ви можете підключити їх до одного стовпця: "виберіть команду (місяць (датаField) як varchar) + '." + лита (рік (датаField) як варчар) '
izik f


32
SELECT DATEPART(yy, DateVal)
SELECT DATEPART(MM, DateVal)
SELECT DATENAME(MM, DateVal)

2
DATEPART SELECT (MM, DateVal) не повертає "MM". Це лише повернення однозначної цифри, якщо місяць знаходиться між 1-9.
Jaikrat

Замість "ММ" слід сказати "місяць": "ВИБІР ДАТЕПАРТ (місяць, getdate ())"
Renne007


15

Для цього є дві функції SQL:

Для отримання детальної інформації зверніться до пов'язаної документації.


5
Я б запропонував навести хоча б короткі приклади, оскільки посилання не завжди залишаються назавжди ... Насправді вони вже не хороші.
Керрол

12

Це також може бути корисно.

SELECT YEAR(0), MONTH(0), DAY(0);

або

SELECT YEAR(getdate()), MONTH(getdate()), DAY(getdate());

або

SELECT YEAR(yourDateField), MONTH(yourDateField), DAY(yourDateField);

У будь-якому разі, щоб не зняти "0" у полі повернення?
Si8


10
convert(varchar(7), <date_field>, 120)
because 120 results in 'yyyy-MM-dd' which is varchar(10)
using varchar(7) will display only year and month

example:
select convert(varchar(7), <date_field>, 120), COUNT(*)
from <some_table>
group by convert(varchar(7), <date_field>, 120)
order by 1

6

Я трактую ваше запитання двома способами.

а) Вам потрібен лише місяць і рік окремо, і в цьому випадку тут відповідь

select 
        [YEAR] = YEAR(getdate())
        ,[YEAR] = DATEPART(YY,getdate())
        , [MONTH] = month(getdate())
        ,[MONTH] = DATEPART(mm,getdate())
        ,[MONTH NAME] = DATENAME(mm, getdate()) 

б)

Ви хочете відображатись із заданої дати, наприклад, '2009-11-24 09:01:55.483'у форматі MONTH.YEAR . Тож вихід повинен бути таким, як 11.2009у цьому випадку.

Якщо це має бути так, то спробуйте це (серед інших альтернатив)

select [Month.Year] = STUFF(CONVERT(varchar(10), GETDATE(),104),1,3,'')

5

Деякі бази даних, такі як MS ACCESSабо RODBCне підтримують SQL SERVERфункції, але для будь-якої бази даних, яка має цю FORMATфункцію, ви можете просто зробити це:

SELECT FORMAT(<your-date-field>,"YYYY-MM") AS year-date FROM <your-table>


3
CONCAT (datepart (yy,DATE), FORMAT (DATE,'MM')) 

дає, наприклад, 201601, якщо ви хочете результат з шести знаків


2

Спробуйте це

select to_char(DATEFIELD,'MON') from YOUR_TABLE

напр.

select to_char(sysdate, 'MON') from dual

2

Спробуйте це:

Португальська

SELECT format(dateadd(month, 0, getdate()), 'MMMM', 'pt-pt') + ' ' + convert(varchar(10),year(getdate()),100)

Результат: майо 2019


Англійська

SELECT format(dateadd(month, 0, getdate()), 'MMMM', 'en-US') + ' ' + convert(varchar(10),year(getdate()),100)

Результат: травень 2019 року

Якщо ви хочете іншою мовою, змініть " pt-pt " або " en-US " на будь-яку з цих посилань


1

У мене була конкретна вимога зробити щось подібне там, де було б показано місяць-рік, що можна зробити наступним чином:

SELECT DATENAME(month, GETDATE()) + '-' + CAST(YEAR(GETDATE()) AS nvarchar) AS 'Month-Year'

У моєму конкретному випадку мені потрібно було це зменшити до 3-х літнього місяця з двозначним роком, виглядаючи так: SELECT LEFT(DATENAME(month, GETDATE()), 3) + '-' + CAST(RIGHT(YEAR(GETDATE()),2) AS nvarchar(2)) AS 'Month-Year'



0

Моя база даних не підтримує більшість функцій вище, але я виявив, що це працює:

SELECT * FROM table WHERE SUBSTR(datetime_column, starting_position, number_of_strings)=required_year_and_month;

наприклад: SELECT SUBSTR(created, 1,7) FROM table;

повертає рік і місяць у форматі "рр-мм"


0

Отримайте місяць та рік від дати

DECLARE @lcMonth nvarchar(10)
DECLARE @lcYear nvarchar(10)

SET @lcYear=(SELECT  DATEPART(YEAR,@Date))
SET @lcMonth=(SELECT  DATEPART(MONTH,@Date))


0

Запит: - Select datename(m,GETDATE())+'-'+cast(datepart(yyyy,GETDATE()) as varchar) as FieldName

Вихід: - січень-2019

загальне поле дати, яке ми можемо використовувати

datename(m,<DateField>)+' '+cast(datepart(yyyy,<DateField>) as varchar) as FieldName


0
select convert(varchar(11), transfer_date, 106) 

отримав мені бажаний результат дати, відформатованого як 07 березня 2018 року

Мій стовпець 'transfer_date' - це стовпець типу дати, і я використовую SQL Server 2017 під час роботи


0

виберіть CONCAT (МІСЯЦЬ (GETDATE ()), '.', YEAR (GETDATE ()))

Вихід: 5.2020

виберіть CONCAT (DATENAME (MONTH, GETDATE ()), '.', YEAR (GETDATE ()))

Вихід: травень.2020

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