Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / группировка по дате без времени / 22 сообщений из 22, страница 1 из 1
15.08.2002, 00:35:33
    #32043367
Yoksel
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
группировка по дате без времени
Привет!

В базе лежит datetime со временем, надо сгруппировать записи по дате. При простом group by время тоже учитывается и записи, отличающиеся даже на секунду оказываются в разных группах.
Как сгруппировать по дате без времени, желательно используя детерминированные функции, чтобы индексы работали?
...
Рейтинг: 0 / 0
15.08.2002, 00:40:08
    #32043369
Слон
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
группировка по дате без времени
Здесь уже много раз обсуждалось, как добыть дату из datetime. Я использую следующий подход
Код: plaintext
CONVERT(smalldatetime, FLOOR(CONVERT(float, @date)))


-- Слон
...
Рейтинг: 0 / 0
15.08.2002, 05:23:43
    #32043386
svz58
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
группировка по дате без времени
>СЛОН
Извини, а почему нельзя чуть короче
CONVERT(smalldatetime, CONVERT(int, @date))
...
Рейтинг: 0 / 0
15.08.2002, 05:54:42
    #32043387
Слон
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
группировка по дате без времени
Можно и так. Но в случае конвертирования в формат datetime (не в smalldatetime) даты < 01/01/1900 конвертирование в int выдаст дату завтрашнего дня, а не сегодняшнего.

-- Слон
...
Рейтинг: 0 / 0
15.08.2002, 18:22:55
    #32043695
Rom
Rom
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
группировка по дате без времени
2 Слон
при использовании FLOOR
FLOOR(-123.45) даст -124 !
это имеет смысл, если используются даты до 1900 года
...
Рейтинг: 0 / 0
15.08.2002, 18:32:57
    #32043697
Зайцев Фёдор
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
группировка по дате без времени
Это деёствительно много раз обсуждалось.
Правильный ответ.

convert(datetime, substring(convert(binary(8), @date), 1, 4)+0x00000000)
...
Рейтинг: 0 / 0
16.08.2002, 02:55:26
    #32043737
Слон
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
группировка по дате без времени
Мне все-таки кажется, что по количеству различных операций мой ответ несколько быстрее.

-- Слон
...
Рейтинг: 0 / 0
16.08.2002, 05:57:47
    #32043743
Слон
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
группировка по дате без времени
Хотя прогнал тесты - результаты по времени и использованию ресурсов - не отличаются. Так что как кому нравится - разницы нет.

-- Слон
...
Рейтинг: 0 / 0
16.08.2002, 10:15:06
    #32043782
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
группировка по дате без времени
Мне кажется, что все отвечали не на тот вопрос, который был задан.

Т.е. это конечно все правильно, только все отвечающие показали как можно отсечь от типа DateTime время оставив тот же тип.

Но для решения вопроса о группировке обратная конвертация - это просто лишний шаг.

Достаточно такой операции:

SELECT SUM(...),MAX(...)
FROM ...
GROUP BY convert(char(8),MyDateTime,112)

И кстати, при такой конвертации нет необходимости в обратной конвертации символьной строки в DateTime, поскольку полученное представление даты позволяет сделать это автоматически.
...
Рейтинг: 0 / 0
16.08.2002, 14:10:29
    #32043900
Зайцев Фёдор
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
группировка по дате без времени
Посмотрите в BOL формат Datetime.
А там написано, что мой способ правильный 8)
...
Рейтинг: 0 / 0
16.08.2002, 14:18:39
    #32043905
Rom
Rom
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
группировка по дате без времени
вот так и написано, способ от 3JIA9I CyKA считать правильным :-))
...
Рейтинг: 0 / 0
16.08.2002, 14:36:19
    #32043916
Rom
Rom
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
группировка по дате без времени
не вижу принципиальной разницы
cast(round(cast(datetime as float), 0, 1))
...
Рейтинг: 0 / 0
16.08.2002, 15:19:14
    #32043939
Зайцев Фёдор
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
группировка по дате без времени
Ув. Rom!
Мы с Вами уже спорили на эту тему, и едва не дошли до взаимных оскорблений. Мне до сих пор стыдно за своё поведение. Но.
Подозреваю, что Вы так не удосужились последовать моему скромному совету и заглянуть-таки в BOL.

P.S.
Между Вашим и моим способом есть только принципиальное отличие. 8)
...
Рейтинг: 0 / 0
16.08.2002, 15:47:55
    #32043960
Rom
Rom
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
группировка по дате без времени
ув. 3JIA9I CyKA
БОЛ читал, но не нашел, что ваш способ правильный, может не там смотрю
...
Рейтинг: 0 / 0
16.08.2002, 16:31:41
    #32043973
Зайцев Фёдор
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
группировка по дате без времени
Мы спорили о том, является ли Datetime вещественым типом. Так вот не является!
...
Рейтинг: 0 / 0
16.08.2002, 16:47:02
    #32043981
Rom
Rom
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
группировка по дате без времени
то что не является, это так, но и Numericом то-же !
я не нашел того, что твой способ правильный :-))
...
Рейтинг: 0 / 0
16.08.2002, 17:13:22
    #32043996
MiCe
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
группировка по дате без времени
и не нумерик....
структура из двух четерехбайтных частей...
2 x 32bit...
...
Рейтинг: 0 / 0
16.08.2002, 17:17:56
    #32044003
Denis_Ka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
группировка по дате без времени
В MSDN за октябрь 2001 года есть такой вопрос:
как мне из типа дата(datetime) получить дату без времени?
ответ: convert(char(20), <datetime field>, 101)
А ответа на вопрос, как представлен тип datetime в SQL Server 7.0 я на вскидку не нашел :-(
"Будем искать!" © Семен Семёныч :-)
...
Рейтинг: 0 / 0
16.08.2002, 17:21:19
    #32044009
Зайцев Фёдор
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
группировка по дате без времени
2Denis_Ka

Datetime состоит из двух int полей
1-e: кол-во дней с 1900.01.01 00:00:00.000
2-e : кол-во отрезков времени (равых 10/3 ms), прошедших с полуночи.
...
Рейтинг: 0 / 0
16.08.2002, 17:21:54
    #32044010
new
new
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
группировка по дате без времени
А если так?

Код: plaintext
CONVERT(SMALLDATETIME, (CONVERT(VARCHAR( 32 ),@date, 101 )), 101 )
...
Рейтинг: 0 / 0
17.08.2002, 01:30:56
    #32044066
Слон
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
группировка по дате без времени
Кстати, как и предполагалось, конвертирование во float работает в том числе и для smalldatetime, а вот работа с binary и тем более с substringами - не работает, надо всегда знать, что за тип даты используется.

-- Слон
...
Рейтинг: 0 / 0
19.08.2002, 08:45:49
    #32044154
Denis_Ka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
группировка по дате без времени
Hi All!
To3JIA9I CyKA :
спасибо за инфу конечно, но я это и так знал, мне было интересно найти инфу, которая позволила бы разрешить ваш спор с Rom .
То, что вы написали по поводу представления datetime - ессно првда. Вот что говорит глоссарий по поводу small datetime:
smalldatetime data type
A SQL Server system data type that holds dates and times of day less precisely than datetime. Storage size is 4 bytes, consisting of one small integer for the number of days after January 1, 1900, and one small integer for the number of minutes past midnight. Dates range from January 1, 1900, through June 6, 2079, with accuracy to the minute.
Получается, что ни datetime, ни small datetime нельзя отнести ни к вещественным, ни целым, ни к numeric!
Так что спор думаю можно считать законченным!
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / группировка по дате без времени / 22 сообщений из 22, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]