Как привести время ко времени

Я кастую DateTime поле времени, используя CAST Синтаксис.

select CAST([time] as time) as [CSTTime]

DateTime2015-03-19 00:00:00.000

Текущий вывод: Время03:05:36.0000000

Мне нужно только HH:MM:SS а не миллисекунды или 0000

Как отфильтровать или привести к точному HH:MM:SS Формат.

3 ответа

Решение

Time не сохраняется с его форматом отображения в SQL Server.
Поэтому, с точки зрения пользователя, вы можете сказать, что он не имеет формата.
Конечно, это не совсем точно, поскольку у него есть формат хранения, но, как обычный пользователь, вы не можете его использовать.
Это верно для всех типов данных даты и времени:
Date, DateTimeOffset, DateTime2, SmallDateTime, DateTime а также Time,

Если вам нужен формат, вам не нужно приводить time но к char, использование Convert чтобы получить char тебе нужно:

SELECT CONVERT(char(10), [time], 108) as CSTTime 

Вот некоторые справочные данные, если вы заинтересованы:

В этой статье, опубликованной в 2000 году, автор подробно объясняет, как SQL Server обрабатывает даты и время. Я сомневаюсь, что что-то существенное изменилось между 2000 и 2015 годами в способе хранения SQL Server date, time а также datetime ценности внутри.

Вот соответствующие цитаты, если вы не хотите читать все это:

Так как же SQL Server хранит даты внутри? Он использует 8 байтов для хранения значения datetime - первые 4 для даты и вторые 4 для времени. SQL Server может интерпретировать оба набора по 4 байта как целые числа.
........
........
SQL Server хранит второе целое число для времени как число тактов после полуночи. Секунда содержит 300 тиков, поэтому тик равен 3,3 миллисекунды (мс).

поскольку time на самом деле хранится как 4-байтовое целое число, он действительно не имеет формат как неотъемлемая часть типа данных.

Возможно, вы также захотите проверить эту статью для более подробного объяснения с примерами кода.

Вы можете достичь этого с CAST просто простое использование TIME(0) Тип данных в следующем:

SELECT CAST('2015-03-19 01:05:06.289' AS TIME(0))

ВЫХОД:

01:05:06

SQL Server 2008:

select cast(MyDate as time) [time] from yourtable

Более ранние версии:

select convert(char(5), MyDate , 108) [time] from yourtable

Другие опции:

SELECT CONVERT(VARCHAR(20), GETDATE(), 114)

Самый простой способ получить время из datetime без стека миллисекунд:

SELECT CONVERT(time(0),GETDATE())

Час и минута

SELECT substring(CONVERT(VARCHAR, GETDATE(), 108),0,6) AS Time

Все ответы выше верны, просто для справки в 2012+ вы также можете сделать:

DECLARE @date datetime2 = SYSDATETIME()

SELECT FORMAT(@date, N'hh:mm:ss', N'en-US')
SELECT TIMEFROMPARTS(DATEPART(hh, @date), DATEPART(mm, @date), DATEPART(ss, @date),0,0)

FORMAT () позволяет выбрать разделитель и культуру. Он вернет тип данных NVARCHAR.

TIMEFROMPARTS () позволяет вам выбрать точность и удобна, когда вы хотите округлить вашу метку времени любым способом, так как она обрабатывает все значения внутри как целые числа. Он вернет тип данных TIME.

Другие вопросы по тегам