SQL конвертировать datetime и вычитать часы
Я пытаюсь преобразовать поле datetime (createTime) из своего стандартного формата 2012-10-06 02: 29: 37.243 в am/pm, поэтому я использую
convert(varchar, CreateTime, 100) as CreateTime
и получить 6 октября 2012 4:29 утра.
Пока что так хорошо, но в том же заявлении я хочу вычесть 4 часа, а затем отобразить поле (вопросы по GMT).
Я прочитал некоторые сообщения здесь, но не смог найти ничего, что могло бы сделать это в одном заявлении.
Ответы
Ответ 1
declare @createTime datetime = '2012-10-06 02:29:37.243';
-- original value, default formatting
select @createTime;
-- formatted
select convert(varchar, @createTime, 100);
-- subtract 4 hours, formatted
select convert(varchar, dateadd(hour, -4, @createTime), 100);
Запрос выше, который использует dateadd
, всегда будет вычитать 4 часа. Если ваша цель состоит в том, чтобы преобразовать произвольное datetime из UTC в локальное время, тогда это более сложно, потому что смещение, которое вам нужно добавить/вычесть, зависит от исходного datetime. Единственное значение, подобное -4, не всегда будет работать. Вот некоторые идеи для решения общего случая:
Эффективно Преобразование дат между UTC и Local (т.е. PST) в SQL 2005
Ответ 2
Для людей, которые хотят вычесть дни и часы
declare @createTime datetime = '2012-10-06 02:29:37.243';
select @createtime as originaltime, dateadd(day, -4, dateadd(hour,-1,@createtime))as minus4daysandhour
Ответ 3
Для SQL-сервера вы можете использовать datetimeoffset
Для mysql используйте функцию CONVERT_TZ для преобразования в другую временную зону.