Преобразование символьной строки в дату в TSQL

Мне нужно преобразовать строку символов в формат даты, чтобы получить первый и последний день месяца.

Вход.

ОБЪЯВИТЬ @InpDat КАК VARCHAR(20) УСТАНОВИТЬ @InpDat = 201308

Ожидаемый результат 31 августа 2013 г.

Мне нужно получить первый и последний день данного года в месяц. Не могли бы вы помочь мне получить это.

Я пробовал с опцией конвертации, но не смог ее получить. ?


person user2380911    schedule 16.09.2013    source источник
comment
да. Но ввод будет в формате год-месяц [например, 201308]   -  person user2380911    schedule 17.09.2013
comment
возможный дубликат запроса для первого и последнего дня месяца   -  person Hamlet Hakobyan    schedule 17.09.2013


Ответы (2)


Используйте CAST(@InpDat + '01' AS DATE), чтобы преобразовать его в дату, и DateAdd< /a> для арифметики даты.

DECLARE @InpDat AS VARCHAR(20) SET @InpDat = '201308'
DECLARE @Month DATE SET @Month = CAST(@InpDat + '01' AS DATE)

SELECT @MONTH AS First, 
       DATEADD(day, -1, DATEADD(month, 1, @MONTH)) AS Last

ДЕМО

person Tim Schmelter    schedule 16.09.2013

Почему вы ожидаете, что случайное число будет преобразовано в формат даты без каких-либо уговоров? База данных — мощный инструмент, но не волшебный.

Вы должны преобразовать число в дату, а затем отформатировать дату так, как вам нравится. Я мог бы предложить такую ​​последовательность вызовов:

-- assume you can separate the year and month into separate parts.
-- use 01 as default day for now, we'll get last day shortly.
DECLARE @IntermediateDate AS DATE SET @IntermediateDate = DATEFROMPARTS(2013,08,01)
-- Advance the month by one, and subtract one day to find the last day of the month.
SET @IntermediateDate = DATEADD( dd, -1, DATEADD( mm, 1, @IntermediateDate))

Теперь отформатируйте, используя ваши любимые функции форматирования.

person PaulProgrammer    schedule 16.09.2013
comment
DATEFROMPARTS недоступно в SQL Server 2008, это функция SQL Server 2012. - person Lamak; 17.09.2013