|
|
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 недокументорованное и в следующих версиях такая конструкция может не заработать. Поэтому, не рекомендуется к применению.
|
|
|
| Отзывы и оценки |
 |
| Jovanny | 07 апреля 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 Alexey | 03 апреля 2008, 07:10 | Оценка: 4 |
| select convert(datetime, floor(convert(float, getdate())) ) |
 |
| ДмитрийДрозд | 01 апреля 2008, 21:44 | Оценка: 5 |
| Оценку забыл ... |
 |
| ДмитрийДрозд | 01 апреля 2008, 21:43 | Оценка: N/A |
| В очередной раз данный топик спасает. Спасибо ОГРОМНОЕ автору. |
 |
| dburtsev1 | 22 марта 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 |
 |
| Все документировано в BOL | 21 февраля 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] |
 |
| Source | 30 мая 2006, 14:25 | Оценка: 5 |
| Какая богатая фантазия :) |
 |
| Дмитрий16 | 02 марта 2005, 11:00 | Оценка: 3 |
| Работает только до 12 часов дня. |
 |
|
Необходимо войти на сайт, чтобы оставлять комментарии | |
|
|
|
|
| Раздел FAQ: Microsoft SQL Server / Transact-SQL / Отрезать время от даты и дату от даты-времени. Округлить дату |
|
|