powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / группировка по дате без времени
22 сообщений из 22, страница 1 из 1
группировка по дате без времени
    #32043367
Yoksel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет!

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


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

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

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

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

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

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

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

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

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

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

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

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

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

-- Слон
...
Рейтинг: 0 / 0
группировка по дате без времени
    #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
22 сообщений из 22, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / группировка по дате без времени
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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