Как я могу извлечь временную часть поля DateTime в SQL? Для моего проекта мне нужно вернуть данные с временной отметкой в 5 вечера поля DateTime независимо от того, какая дата
Временная часть поля DateTime в SQL
Ответ 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, в котором отсутствует компонент времени, а затем обратно в значение datetimeselect 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'