Я хочу выбрать value = 201301
select getdate(), cast(datepart(year, getdate()) as varchar(4))+cast(datepart(MONTH, getdate()) as varchar(2))
он возвращает 20131
Каков нормальный способ сделать это?
Я хочу выбрать value = 201301
select getdate(), cast(datepart(year, getdate()) as varchar(4))+cast(datepart(MONTH, getdate()) as varchar(2))
он возвращает 20131
Каков нормальный способ сделать это?
SELECT LEFT(CONVERT(varchar, GetDate(),112),6)
SELECT CONVERT(nvarchar(6), GETDATE(), 112)
Собственно, это правильный способ получить то, что вы хотите, если только вы не можете использовать 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)
.
Вы можете конвертировать дату во многих форматах, например:
CONVERT(NVARCHAR(10), DATE_OF_DAY, 103) => 15/09/2016
CONVERT(NVARCHAR(10), DATE_OF_DAY, 3) => 15/09/16
Синтаксис:
CONVERT('TheTypeYouWant', 'TheDateToConvert', 'TheCodeForFormating' * )
В вашем случае, я только что преобразовал и ограничил размер с помощью nvarchar (6) следующим образом:
CONVERT(NVARCHAR(6), DATE_OF_DAY, 112) => 201609
См. больше: http://www.w3schools.com/sql/func_convert.asp
Более эффективный метод, который использует целочисленную математику, а не строки /varchars, что приведет к типу int, а не типу string:
SELECT YYYYMM = (YEAR(GETDATE()) * 100) + MONTH(GETDATE())
Добавляет два нуля в правую часть года, а затем добавляет месяц к добавленным двум нулям.
В этом месяце 1, так что вы получаете ожидаемое значение. вам нужно будет возвратить месяц (1 → 01) в соответствии с этим ответом: Как преобразовать int в нулевую заполненную строку в T-SQL?