Округление дат до первого дня месяца

Я использую SQL Server 2014, и я работаю со столбцом из одной из моих таблиц, в которых перечислены даты прибытия.

Он имеет следующий формат:

ArrivalDate
2015-10-17 00:00:00.000
2015-12-03 00:00:00.000

Я пишу запрос, который будет извлекать данные из приведенной выше таблицы, включая колонки ArrivalDate. Однако мне нужно будет преобразовать даты так, чтобы они стали первым днем их соответствующих месяцев.

другими словами, мой запрос должен вывести приведенный выше пример как следует:

2015-10-01 00:00:00.000
2015-12-01 00:00:00.000

мне это нужно, чтобы я мог создать связь с моей таблицей дат в моей модели PowerPivot.

Я пробовал этот синтаксис, но он не соответствует моим требованиям:

CONVERT(CHAR(4),[ArrivalDate], 100) + CONVERT(CHAR(4), [ArrivalDate], 120) AS [MTH2]

5 ответов


Если, например, это 15 числа данного месяца, то вычитаете 14:

SELECT 
    ArrivalDate, 
    DATEADD(DAY, -DATEPART(DAY, ArrivalDate) + 1, ArrivalDate) AS FirstDay
FROM [Your Table]

чтобы устранить часть времени, которую вы можете использовать CAST(... AS DATE).


использовать FORMAT для форматирования даты.

DECLARE @date DATETIME = '2015-10-17 00:00:00.000'

SELECT FORMAT(@date, 'yyyy-MM-01 HH:mm:ss.fff')

или если вы не хотите время:

SELECT FORMAT(@date, 'yyyy-MM-01 00:00:00.000')

LiveDemo


начиная с SQL Server 2012, вы также можете использовать DATEFROMPARTS:

SELECT DATEFROMPARTS(YEAR(ArrivalDate), MONTH(ArrivalDate), 1)
FROM   my_table

круглая дата до первого числа месяца:

DATEADD(MONTH, DATEDIFF(MONTH, 0, DateColumn), 0)

или просто используйте круглую функцию -

ВЫБРАТЬ КРУГЛЫЙ (TO_DATE ('27-OCT-00'), 'ГОД') "Новый год" от DUAL;

Новый Год

01-JAN-01