По предложению @ Роба в комментариях вы можете сделать это с помощью: Пример
declare @myDateTime DateTime = getutcdate()
select format(@myDateTime, 'yy')
+ format(DatePart(dy, @myDateTime), '000')
+ format(@myDateTime, '-HHmm')
Однако, часть ddd
недоступна таким образом, так как ddd
конвертируется в название дня недели, т.е. по документации .Тем не менее, вы можете использовать это для упрощения выше: Пример
Исходное решение:
Вот решение: Пример
declare @myDateTime DateTime = getutcdate()
--to get the component parts
select DatePart(YEAR, @myDateTime) - 2000 YY
, DateDiff(Day, DateFromParts(DatePart(YEAR, @myDateTime),1,1), @myDateTime) DDD
, DatePart(Hour, @myDateTime) HH
, DatePart(Minute, @myDateTime) MM
--to format as a single string
select right('0' + cast(DatePart(YEAR, @myDateTime) - 2000 as varchar(10)), 2)
+ right('00' + cast(DateDiff(Day, DateFromParts(DatePart(YEAR, @myDateTime),1,1), @myDateTime) as varchar(10)), 3)
+ '-'
+ right('0' + cast(DatePart(Hour, @myDateTime) as varchar(10)), 2)
+ right('0' + cast(DatePart(Minute, @myDateTime) as varchar(10)), 2)
DatePart(YEAR, @myDateTime) - 2000
дает нам двухзначный год, получая полный год (например, 2018
как число, а затем отбрасывая только те цифры, которые нам интересны, вычитая 2000
) DateDiff(Day, DateFromParts(DatePart(YEAR, @myDateTime),1,1), @myDateTime)
дает нам количество дней с 1 января в году даты даты (задается DateFromParts(DatePart(YEAR, @myDateTime),1,1))
до указанной даты (поэтому 1 января будет 0
; если вы хотите, чтобы 1 январябыть 1, просто добавьте 1 к этому результату.) - Значение часа и минуты просто задается путем вытягивания этих частей даты.
- Когда мы создаем строку, мы приводим эти числовые результаты кСтроки (varchar) и объединить их.
- Часть
right('0' + /*...*/)
позволяет нам правильно дополнить цифры начальными нулями, поэтому если время равно 09:05
, мы получим 0905
вместо 95
.
Вы можете получить почти то, что вам нужно, с помощью встроенной команды format
, например,
select format(@myDateTime, 'yy-HHmm')
Однако часть ddd
недоступна, так как ddd
преобразуется в название дня недели, т. Е. Согласно документации .Тем не менее, вы можете использовать это для упрощения выше: Пример
select format(@myDateTime, 'yy')
+ right('00' + cast(DateDiff(Day, DateFromParts(DatePart(YEAR, @myDateTime),1,1), @myDateTime) as varchar(10)), 3)
+ format(@myDateTime, '-HHmm')