Как использовать DateTime во времени - программирование

Как использовать DateTime во времени

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

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

DateTime 2015-03-19 00:00:00.000

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

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

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

4b9b3361

Ответ 1

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

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

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

Вот некоторые данные backgroud, если вам интересно:

В в этой статье, опубликованной в 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 байта, он действительно не имеет формата как неотъемлемой части типа данных.

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

Ответ 2

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

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

ВЫВОД:

01:05:06

Ответ 3

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