#sql-server
#sql-server
Вопрос:
У меня есть требование возвращать даты из базы данных в формате, подобном этим датам:
Feb 25 2015 7:36PM
Jun 4 2015 9:54AM
Sep 17 2015 1:10PM
Apr 5 2013 12:00AM
Формат этих дат почти такой MMM dd yyyy hh:mmtt
*, за исключением того, что мне нужны начальные пробелы, а не начальные нули.
Вот моя попытка вернуть даты в этом формате:
declare @dt datetime = '2015-06-04 09:54:15'
select replace(format(@dt, 'MMM dd yyyy hh:mmtt'), ' 0', ' ')
-- Jun 4 2015 9:54AM
Я просто заменяю «0» двумя пробелами.
- Это правильный способ сделать это?
- Есть ли лучший способ сделать это?
Я не могу этого сделать на C #, потому что у меня нет контроля над требованиями. Я бы, вероятно, сделал то же самое в C #, если бы мог.
* Использование пользовательских строк форматирования даты и времени SQL Server, которые, я думаю, эквивалентны C # https://msdn.microsoft.com/en-us/library/8kb3ddd4 (v = против 110).aspx
Комментарии:
1. Если это вообще возможно, я бы настоятельно рекомендовал оставить форматирование интерфейсу. Если вы настраиваете форматирование из базы данных, вы не сможете правильно выполнять такие вещи, как сортировка.
2. Какая версия SQL?
3. @ajeh Microsoft SQL Server 2012 — 11.0.5058.0 (X64)
Ответ №1:
Запустите следующий скрипт, который даст вам нужный результат, хитрость заключается в добавлении двух пробелов между MMM dd, dd гггг и гггг чч: mmtt
declare @dt datetime = '2015-06-04 09:54:15'
select replace(format(@dt, 'MMM dd yyyy hh:mmtt'), ' 0', ' ')
set @dt = '2015-12-31 19:54:15'
select replace(format(@dt, 'MMM dd yyyy hh:mmtt'), ' 0', ' ')
set @dt = '2015-12-31 00:00:00'
select replace(format(@dt, 'MMM dd yyyy hh:mmtt'), ' 0', ' ')