Подтвердить что ты не робот

Конвертировать дату в формат YYYYMM

Я хочу выбрать value = 201301

select getdate(), cast(datepart(year, getdate()) as varchar(4))+cast(datepart(MONTH, getdate()) as varchar(2))

он возвращает 20131

Каков нормальный способ сделать это?

4b9b3361

Ответ 1

SELECT LEFT(CONVERT(varchar, GetDate(),112),6)

Ответ 2

SELECT CONVERT(nvarchar(6), GETDATE(), 112)

Ответ 3

Собственно, это правильный способ получить то, что вы хотите, если только вы не можете использовать MS SQL 2014 (который, наконец, включает строки пользовательского формата для дат).

Чтобы получить yyyymm вместо yyyym, вы можете использовать этот небольшой трюк:

select 
 right('0000' + cast(datepart(year, getdate()) as varchar(4)), 4)
 + right('00' + cast(datepart(month, getdate()) as varchar(2)), 2)

Это быстрее и надежнее, чем детализировать convert(..., 112).

Ответ 4

Вы можете конвертировать дату во многих форматах, например:

CONVERT(NVARCHAR(10), DATE_OF_DAY, 103) => 15/09/2016
CONVERT(NVARCHAR(10), DATE_OF_DAY, 3) => 15/09/16

Синтаксис:

CONVERT('TheTypeYouWant', 'TheDateToConvert', 'TheCodeForFormating' * )
  • Код является целым числом, здесь 3 является третьим формированием без века, если вы хотите, чтобы век просто изменил код на 103.

В вашем случае, я только что преобразовал и ограничил размер с помощью nvarchar (6) следующим образом:

CONVERT(NVARCHAR(6), DATE_OF_DAY, 112) => 201609

См. больше: http://www.w3schools.com/sql/func_convert.asp

Ответ 5

Более эффективный метод, который использует целочисленную математику, а не строки /varchars, что приведет к типу int, а не типу string:

SELECT YYYYMM = (YEAR(GETDATE()) * 100) + MONTH(GETDATE())

Добавляет два нуля в правую часть года, а затем добавляет месяц к добавленным двум нулям.