Подтвердить что ты не робот

Временная часть поля DateTime в SQL

Как я могу извлечь временную часть поля DateTime в SQL? Для моего проекта мне нужно вернуть данные с временной отметкой в ​​5 вечера поля DateTime независимо от того, какая дата

4b9b3361

Ответ 1

В SQL Server, если вам нужен только hh:mi, вы можете использовать:

DECLARE @datetime datetime

SELECT @datetime = GETDATE()

SELECT RIGHT('0'+CAST(DATEPART(hour, @datetime) as varchar(2)),2) + ':' +
       RIGHT('0'+CAST(DATEPART(minute, @datetime)as varchar(2)),2)

Ответ 2

Это вернет только время

Для SQL Server:

SELECT convert(varchar(8), getdate(), 108)

Объяснение:

getDate() дает текущую дату и время.
108 форматирует/дает нам требуемую часть в этот раз в этом случае.
varchar(8) дает нам количество символов из этой части.
Как
Если вы написали varchar(7) там, он даст вам 00:00:0
Если вы написали varchar(6) там, он даст вам 00:00:
Если вы написали varchar(15) там, он все равно даст вам 00:00:00, потому что он дает вывод только части времени. SQLFiddle Demo

Для MySQL:

SELECT DATE_FORMAT(NOW(), '%H:%i:%s')

Забастовкa > SQLFiddle Demo

Ответ 3

Если вам нужен только час вашего дня и времени, вы можете использовать DATEPART() - SQL Server:

declare @dt datetime
set @dt = '2012-09-10 08:25:53'

select datepart(hour, @dt) -- returns 8

В SQL Server 2008+ вы можете CAST() как время:

declare @dt datetime
set @dt = '2012-09-10 08:25:53'

select CAST(@dt as time) -- returns 08:25:53

Ответ 4

Попробуйте это в SQL Server 2008:

select *
from some_table t
where convert(time,t.some_datetime_column) = '5pm'

Если вы хотите получить случайное значение даты и времени, настройте его так, чтобы компонент времени составлял 5 часов, а затем в SQL Server 2008 существует несколько способов. Сначала вам нужно начать день (например, 2011-09-30 00: 00: 00.000).

  • Один из методов, который работает для всех версий Microsoft SQL Server, а также всех версий Sybase - использовать convert/3 для преобразования значения datetime в varchar, в котором отсутствует компонент времени, а затем обратно в значение datetime

    select convert(datetime,convert(varchar,current_timestamp,112),112)
    

Вышеуказанное дает вам начало дня для текущего дня.

  • Однако в SQL Server 2008 вы можете сказать что-то вроде этого:

    select start_of_day =               t.some_datetime_column
                        - convert(time, t.some_datetime_column ) ,
    from some_table t
    

    который, скорее всего, быстрее.

Как только у вас есть начальный день, добраться до 5 вечера легко. Просто добавьте 17 часов к значению начала дня:

select five_pm = dateadd(hour,17, t.some_datetime_column
                   - convert(time,t.some_datetime_column)
                   )
from some_table t

Ответ 5

Я знаю, что это старый вопрос, но так как другой отвечает на все

  • возвращает строки (а не datetimes),
  • полагаться на внутреннее представление дат (преобразование в float, int и обратно) или
  • требуется SQL Server 2008 или более поздняя версия,

Я думал, что добавлю "чистый" вариант, который требует только операций datetime и работает с SQL Server 2005 +:

SELECT DATEADD(dd, -DATEDIFF(dd, 0, mydatetime), mydatetime)

Это вычисляет разницу (в целые дни) между нулем даты (1900-01-01) и заданной датой, а затем вычитает это количество дней с указанной даты, тем самым установив свой компонент даты на ноль.

Ответ 6

"Для моего проекта я должен вернуть данные с временной отметкой в ​​5 вечера поля DateTime, независимо от того, какая дата.

Итак, я думаю, что вы имели в виду, что вам нужна дата, а не время. Вы можете сделать что-то подобное, чтобы получить дату с 5:00 в качестве времени:

SELECT CONVERT(VARCHAR(10), GetDate(), 110) + ' 05:00:00'

Ответ 7

Это должно отделить часть даты:

select convert(datetime,convert(float, getdate()) - convert(int,getdate())), getdate()

и вернуть дату и время с датой по умолчанию 1900-01-01.

Ответ 8

Вы можете использовать CONVERT(TIME,GETDATE()) в этом случае:

INSERT INTO infoTbl
(itDate, itTime)
VALUES (GETDATE(),CONVERT(TIME,GETDATE()))

или если вы хотите распечатать или вернуть это время, используйте как это:

DECLARE @dt TIME
SET @dt = CONVERT(TIME,GETDATE())
PRINT @dt

Ответ 9

SELECT DISTINCT   
                 CONVERT(VARCHAR(17), A.SOURCE_DEPARTURE_TIME, 108)  
FROM  
      CONSOLIDATED_LIST AS A  
WHERE   
      CONVERT(VARCHAR(17), A.SOURCE_DEPARTURE_TIME, 108) BETWEEN '15:00:00' AND '15:45:00'

Ответ 10

выберите приведение (getdate() в качестве времени (0))

возвращает например: - 15:19:43

замените getdate() на дату, из которой вы хотите извлечь только время!

Ответ 11

Обратите внимание, что начиная с MS SQL 2012 и далее вы можете использовать FORMAT(value,'format')

например, WHERE FORMAT(YourDatetime,'HH:mm') = '17:00'