SQL.RU
    Все про SQL и базы данных
Microsoft SQL Server
Oracle
.NET Framework
MySql
Работа
MS Access
Visual Fox Pro
Delphi
Sybase
PowerBuilder
InterBase, Firebird, Yaffil
Форум
Java
Microsoft Office
PHP , Perl
Informix
Проектирование
C++
Visual Basic
Microsoft SQL Server
Transact-SQL
Отрезать время от даты и дату от даты-времени. Округлить дату
Автор: Dankov
Прислал:

Документированым способом это можно сделать через конвертацию к строковому типу со специальным форматом и обратно в дату-время.

Округлить дату
declare @date datetime
set @date=CONVERT(varchar(8), GETDATE(), 112)

Изъять время из даты
declare @time datetime
set @time=CONVERT(varchar(8), GETDATE(), 108)


Такого же результата можно достигнуть через конвертацию даты в тип float с последующим округлением и обратным преобразованием в дату. Однако, этот способ не является документированным, так как преобразование datetime -> float недокументорованное и в следующих версиях такая конструкция может не заработать. Поэтому, не рекомендуется к применению.
Отзывы и оценки
Jovanny07 апреля 2010, 12:33Оценка: N/A
Насколько всё проще стало в SQL Server 2008:
SELECT CAST(GETDATE() AS date), CAST(GETDATE() AS time)
Александр Волок (def1983)06 августа 2008, 17:40Оценка: N/A
2dburtsev1 автору dbo.datetrim ()

Метод очень не оптимальный. Значительно производительней использовать встроенные функции непосредственно в самом запросе.
Knyazev Alexey03 апреля 2008, 07:10Оценка: 4
select convert(datetime, floor(convert(float, getdate())) )
ДмитрийДрозд01 апреля 2008, 21:44Оценка: 5
Оценку забыл ...
ДмитрийДрозд01 апреля 2008, 21:43Оценка: N/A
В очередной раз данный топик спасает. Спасибо ОГРОМНОЕ автору.
dburtsev122 марта 2007, 19:30Оценка: N/A
create function dbo.datetrim (@date datetime)
returns datetime
as
begin
-- convert datetime to date
return dateadd( day, datediff(day, 0, @date), 0);
end
Все документировано в BOL21 февраля 2007, 15:10Оценка: 3
/*
Values with the datetime data type are stored internally by Microsoft SQL Server as two 4-byte integers. The first 4 bytes store the number of days before or after the base date, January 1, 1900. The base date is the system reference date. Values for datetime earlier than January 1, 1753, are not permitted. The other 4 bytes store the time of day represented as the number of milliseconds after midnight.
*/
select
cast(cast(cast(cast(getdate() as binary(8)) as binary(4)) as binary(8)) as datetime) [date],
cast(cast(getdate() as binary(4)) as datetime) [time]
Source30 мая 2006, 14:25Оценка: 5
Какая богатая фантазия :)
Дмитрий1602 марта 2005, 11:00Оценка: 3
Работает только до 12 часов дня.



Необходимо войти на сайт, чтобы оставлять комментарии


Раздел FAQ: Microsoft SQL Server / Transact-SQL / Отрезать время от даты и дату от даты-времени. Округлить дату
Rambler's Top100  Политика сайта