Як отримати час з формату DateTime в SQL?


182

Я хочу отримати лише час із стовпця 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. Ви можете вказати формат і отримати бажаний вихід
Naveen Babu

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
   ...

Для старих версій без варчарських перетворень

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

чому ви не використовуєте цей ВИБІР КОНВЕРТ (VARCHAR (8), GETDATE (), 108) AS HourMinuteSecond, CONVERT (VARCHAR (8), GETDATE (), 101) AS DateТолько є питання щодо продуктивності?
rahularyansharma

2
@rahularyansharma: Я не використовую перетворення
варчара

сер, я хочу знати, чи є зниження продуктивності, якщо ми використовуємо це замість вашого рішення?
rahularyansharma

1
@rahularyansharma: ви можете перевірити себе на основі цього stackoverflow.com/questions/133081 / ...
ГБН

1
Для тих, хто не стежить, 0представляє хвилину дати 1900-01-01. Таким чином, це отримує (від'ємну) кількість днів між значенням стовпця та 0, а потім додає ті негативні дні до значення стовпця, які "нулюють" частину дати, 1900-01-01і вам залишається лише час.
xr280xr

13

Найпростіший спосіб отримати час від дати без мілісекундних стеків:

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

10

Спробуйте скористатися цим

  • Дата до часу

    select cast(getdate() as time(0))
  • Час до TinyTime

    select cast(orig_time as time(0))





3

Я часто використовую цей сценарій, щоб отримати час від DateTime:

SELECT CONVERT(VARCHAR(9),RIGHT(YOURCOLUMN_DATETIME,9),108) FROM YOURTABLE

чому я отримую 9 перед часом. Результат: 9 23:21
Sayed Muhammad

2

Щоб отримати час від дати, ми можемо використовувати

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

2

Якщо ви хочете побачити щось у цьому стилі: 23 жовтня 2013 10:30

Використовуй це

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

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

  1. тип даних
  2. Стовпець / значення
  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 () викликає помилку.


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.