TSQL strip date от datetime - PullRequest
       1

TSQL strip date от datetime

8 голосов
/ 19 июля 2010

Каков наилучший способ удалить дату из DATETIME, чтобы для сравнения оставалось только время ?

Я знаю, что могу сделать следующее:

CONVERT(DATETIME, CONVERT(VARCHAR(8), GETDATE(),8))

Но это касается конвертации и персонажей. Если я хотел проверить, было ли время (включая минуты) между двумя другими временами, хранящимися в столбцах DATETIME, есть ли элегантный способ сделать это без необходимости преобразования в символьные строки?

Ответы [ 4 ]

11 голосов
/ 19 июля 2010

Если вы используете SQL 2008

SELECT CAST(GETDATE() AS TIME)
10 голосов
/ 19 июля 2010

Попробуйте функцию TimeOnly из Основные функции SQL Server Date, Time и DateTime :

create function TimeOnly(@DateTime DateTime)
returns datetime
as
    begin
    return dateadd(day, -datediff(day, 0, @datetime), @datetime)
    end
go

Или просто приведите DateTime в качестве времени в SQL Server 2008:

declare @time as time
set @time = cast(dateTimeVal as time)
1 голос
/ 19 июля 2010
DECLARE 
  @Now DateTime, 
  @Today DateTime,
  @Time DateTime

SET @Now = GetDate() 
SET @Today = DateAdd(dd, DateDiff(dd, 0, @Now), 0) 

SET @Time = DateAdd(ss, DateDiff(ss, @Today, @Now), 0)

SELECT @Time
0 голосов
/ 09 июня 2018

Просто еще один способ получить дату и время от datetime.

datetime в SQL Server реализовано в виде значения с плавающей запятой, где целая часть floor (value) - это день с 1900-01-01 идробная часть (значение - пол (значение)) является частью двадцати четырех часов, прошедших с начала дня

select 
    d as [datetime],
    cast(cast(T.d as float) - floor(cast(T.d as float)) as datetime) as [time],
    cast(floor(cast(T.d as float)) as datetime) as [date]
from
    (values
        (getdate()),
        ('1753-01-01 23:59:59.700'),
        ('1899-12-31 00:00:00.300'),
        ('1900-01-01 00:00:00.300')
    ) as T(d);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...