Как получить время из формата 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
Jig12
источник
поиск метода 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
t-clausen.dk
источник
34

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

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

V4Vendetta
источник
Он работает только в 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))
Cantarero
источник
5

Попробуй это:

select  convert(nvarchar,CAST(getdate()as time),100)
Balaji N
источник
5

Попробуйте это, это будет работать:

CONVERT(VARCHAR(8),DATETIME,114)

Для вашей справки .

user8498521
источник
3

select AttDate,convert(char(5), AttDate, 108) [Time] from yourTableName

Сахар Шах
источник
3
select cast (as time(0))

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

(select cast(start_date as time(0))) AS 'START TIME'
Метин Озсой
источник
3

Я часто использую этот скрипт, чтобы получить Time от DateTime:

SELECT CONVERT(VARCHAR(9),RIGHT(YOURCOLUMN_DATETIME,9),108) FROM YOURTABLE
ChinoNoypi
источник
почему я получаю 9 перед временем .. Результат: 9 23:21
сказал Мухаммад Идриес
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. Вы можете выбирать в пределах от. Выберите один за другим, чтобы изменить формат даты.
Arif Ansari
источник
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
select convert(char(5), tbl_CustomerBooking.CheckInTime, 108) AS [time]
from tbl_CustomerBooking
JIYAUL MUSTAPHA
источник
1

на MSSQL2012 или выше

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

...или...

convert(time(0),dateadd(ms,datediff(ms, [StartDateTime], [StopDateTime]),0) )
aVB.NetCoder
источник
1

SQL Server 2012:

Select TRY_CONVERT(TIME, myDateTimeColumn) from myTable;

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

jinhr
источник
-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
user7131338
источник
Не работает дает ошибку'to_char' is not a recognized built-in function name.
captainsac