Как получить время из формата DateTime в SQL?


182

Я хочу получить только столбец Time from DateTime, используя SQL-запрос, используя SQL Server 2005 и 2008 Вывод по умолчанию:

AttDate                   
==
2011-02-09 13:09:00    
2011-02-09 14:10:00    

Я хотел бы этот вывод:

AttDate                Time 
==
2011-02-09 13:09:00    13:09
2011-02-09 14:10:00    14:10

поиск метода to_char в sql. Вы можете указать формат и получить желаемый результат
Навин Бабу

1
выберите конвертировать (varchar (10), getdate (), 108)
rahularyansharma

Это может быть SELECT CONVERT(VARCHAR(8),GETDATE(),108)для сервера sql
V4Vendetta

Ответы:


342

SQL Server 2008:

SELECT cast(AttDate as time) [time]
FROM yourtable

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

SELECT convert(char(5), AttDate, 108) [time]
FROM yourtable

34

Предполагая Sql сервер

SELECT CONVERT(VARCHAR(8),GETDATE(),108)


Он работает только в getdate (), когда, когда я передаю команду select convert (varchar (8), '2011-02-09 13: 09: 00', 108), он выдает первые 8 символов с даты. Как это исправить ?
Апарна

24

SQL Server 2008+ имеет тип данных "время"

SELECT 
    ..., CAST(MyDateTimeCol AS time)
FROM
   ...

Для более старых версий, без преобразования varchar

SELECT 
    ..., DATEADD(dd, DATEDIFF(dd, MyDateTimeCol, 0), MyDateTimeCol)
FROM
   ...

почему вы не используете этот SELECT CONVERT (VARCHAR (8), GETDATE (), 108) AS HourMinuteSecond, CONVERT (VARCHAR (8), GETDATE (), 101) AS DateOnly есть ли проблемы с производительностью?
rahularyansharma

2
@rahularyansharma: я не использую преобразование varchar для дат, если это необходимо
gbn

Сэр, я хочу знать, есть ли снижение производительности, если мы используем это вместо вашего решения?
rahularyansharma

1
@rahularyansharma: вы можете проверить себя, основываясь на этом stackoverflow.com/questions/133081/…
gbn 10.10.11

1
Для тех, кто не следует, 0представляет минимальную дату 1900-01-01. Таким образом, это получает (отрицательное) количество дней между значением столбца и 0, затем добавляет те отрицательные дни к значению столбца, которое «обнуляет» часть даты, 1900-01-01и у вас остается только время.
xr280xr

13

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

SELECT convert(time(0),getDate())

10

Попробуйте использовать это

  • Дата к времени

    select cast(getdate() as time(0))
  • Время TinyTime

    select cast(orig_time as time(0))




3
select cast (as time(0))

было бы хорошим предложением. Например:

(select cast(start_date as time(0))) AS 'START TIME'


2

Чтобы получить время от datetime, мы можем использовать

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

2

Если вы хотите что-то встретить в этом стиле: 23 октября 2013 10:30

Использовать это

SELECT CONVERT(NVARCHAR(30),getdate(), 100)

convert() метод принимает 3 параметра

  1. тип данных
  2. Column / Value
  3. Стиль: Доступны стили от 100 до 114. Вы можете выбирать в пределах от. Выберите один за другим, чтобы изменить формат даты.

2

Получить дату сервера

SELECT LTRIM(RIGHT(CONVERT(VARCHAR(20), GETDATE(), 100), 7)) FROM TABLENAME WHERE ...

или

Если он хранится в таблице

SELECT LTRIM(RIGHT(CONVERT(VARCHAR(20), datename, 100), 7)) FROM TABLENAME WHERE ...

Результат:

11:41 утра



1

на MSSQL2012 или выше

cast(dateadd(ms,datediff(ms, [StartDateTime], [StopDateTime]),0) as Time(0))

...или...

convert(time(0),dateadd(ms,datediff(ms, [StartDateTime], [StopDateTime]),0) )

1

SQL Server 2012:

Select TRY_CONVERT(TIME, myDateTimeColumn) from myTable;

Лично я предпочитаю TRY_CONVERT (), а не CONVERT (). Основное отличие: в случае сбоя приведения TRY_CONVERT () возвращает значение NULL, а CONVERT () вызывает ошибку.


-1

select substr(to_char(colUmn_name, 'DD/MM/RRRR HH:MM:SS'),11,19) from table_name;

Выход: из

05:11:26
05:11:24
05:11:24

Не работает дает ошибку'to_char' is not a recognized built-in function name.
captainsac
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.