|
|
|
группировка по дате без времени
|
|||
|---|---|---|---|
|
#18+
Привет! В базе лежит datetime со временем, надо сгруппировать записи по дате. При простом group by время тоже учитывается и записи, отличающиеся даже на секунду оказываются в разных группах. Как сгруппировать по дате без времени, желательно используя детерминированные функции, чтобы индексы работали? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2002, 00:35:33 |
|
||
|
группировка по дате без времени
|
|||
|---|---|---|---|
|
#18+
Здесь уже много раз обсуждалось, как добыть дату из datetime. Я использую следующий подход Код: plaintext -- Слон ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2002, 00:40:08 |
|
||
|
группировка по дате без времени
|
|||
|---|---|---|---|
|
#18+
>СЛОН Извини, а почему нельзя чуть короче CONVERT(smalldatetime, CONVERT(int, @date)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2002, 05:23:43 |
|
||
|
группировка по дате без времени
|
|||
|---|---|---|---|
|
#18+
Можно и так. Но в случае конвертирования в формат datetime (не в smalldatetime) даты < 01/01/1900 конвертирование в int выдаст дату завтрашнего дня, а не сегодняшнего. -- Слон ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2002, 05:54:42 |
|
||
|
группировка по дате без времени
|
|||
|---|---|---|---|
|
#18+
2 Слон при использовании FLOOR FLOOR(-123.45) даст -124 ! это имеет смысл, если используются даты до 1900 года ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2002, 18:22:55 |
|
||
|
группировка по дате без времени
|
|||
|---|---|---|---|
|
#18+
Это деёствительно много раз обсуждалось. Правильный ответ. convert(datetime, substring(convert(binary(8), @date), 1, 4)+0x00000000) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2002, 18:32:57 |
|
||
|
группировка по дате без времени
|
|||
|---|---|---|---|
|
#18+
Мне все-таки кажется, что по количеству различных операций мой ответ несколько быстрее. -- Слон ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2002, 02:55:26 |
|
||
|
группировка по дате без времени
|
|||
|---|---|---|---|
|
#18+
Хотя прогнал тесты - результаты по времени и использованию ресурсов - не отличаются. Так что как кому нравится - разницы нет. -- Слон ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2002, 05:57:47 |
|
||
|
группировка по дате без времени
|
|||
|---|---|---|---|
|
#18+
Мне кажется, что все отвечали не на тот вопрос, который был задан. Т.е. это конечно все правильно, только все отвечающие показали как можно отсечь от типа DateTime время оставив тот же тип. Но для решения вопроса о группировке обратная конвертация - это просто лишний шаг. Достаточно такой операции: SELECT SUM(...),MAX(...) FROM ... GROUP BY convert(char(8),MyDateTime,112) И кстати, при такой конвертации нет необходимости в обратной конвертации символьной строки в DateTime, поскольку полученное представление даты позволяет сделать это автоматически. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2002, 10:15:06 |
|
||
|
группировка по дате без времени
|
|||
|---|---|---|---|
|
#18+
Посмотрите в BOL формат Datetime. А там написано, что мой способ правильный 8) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2002, 14:10:29 |
|
||
|
группировка по дате без времени
|
|||
|---|---|---|---|
|
#18+
вот так и написано, способ от 3JIA9I CyKA считать правильным :-)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2002, 14:18:39 |
|
||
|
группировка по дате без времени
|
|||
|---|---|---|---|
|
#18+
не вижу принципиальной разницы cast(round(cast(datetime as float), 0, 1)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2002, 14:36:19 |
|
||
|
группировка по дате без времени
|
|||
|---|---|---|---|
|
#18+
Ув. Rom! Мы с Вами уже спорили на эту тему, и едва не дошли до взаимных оскорблений. Мне до сих пор стыдно за своё поведение. Но. Подозреваю, что Вы так не удосужились последовать моему скромному совету и заглянуть-таки в BOL. P.S. Между Вашим и моим способом есть только принципиальное отличие. 8) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2002, 15:19:14 |
|
||
|
группировка по дате без времени
|
|||
|---|---|---|---|
|
#18+
ув. 3JIA9I CyKA БОЛ читал, но не нашел, что ваш способ правильный, может не там смотрю ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2002, 15:47:55 |
|
||
|
группировка по дате без времени
|
|||
|---|---|---|---|
|
#18+
Мы спорили о том, является ли Datetime вещественым типом. Так вот не является! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2002, 16:31:41 |
|
||
|
группировка по дате без времени
|
|||
|---|---|---|---|
|
#18+
то что не является, это так, но и Numericом то-же ! я не нашел того, что твой способ правильный :-)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2002, 16:47:02 |
|
||
|
группировка по дате без времени
|
|||
|---|---|---|---|
|
#18+
и не нумерик.... структура из двух четерехбайтных частей... 2 x 32bit... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2002, 17:13:22 |
|
||
|
группировка по дате без времени
|
|||
|---|---|---|---|
|
#18+
В MSDN за октябрь 2001 года есть такой вопрос: как мне из типа дата(datetime) получить дату без времени? ответ: convert(char(20), <datetime field>, 101) А ответа на вопрос, как представлен тип datetime в SQL Server 7.0 я на вскидку не нашел :-( "Будем искать!" © Семен Семёныч :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2002, 17:17:56 |
|
||
|
группировка по дате без времени
|
|||
|---|---|---|---|
|
#18+
2Denis_Ka Datetime состоит из двух int полей 1-e: кол-во дней с 1900.01.01 00:00:00.000 2-e : кол-во отрезков времени (равых 10/3 ms), прошедших с полуночи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2002, 17:21:19 |
|
||
|
группировка по дате без времени
|
|||
|---|---|---|---|
|
#18+
А если так? Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2002, 17:21:54 |
|
||
|
группировка по дате без времени
|
|||
|---|---|---|---|
|
#18+
Кстати, как и предполагалось, конвертирование во float работает в том числе и для smalldatetime, а вот работа с binary и тем более с substringами - не работает, надо всегда знать, что за тип даты используется. -- Слон ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.08.2002, 01:30:56 |
|
||
|
группировка по дате без времени
|
|||
|---|---|---|---|
|
#18+
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! Так что спор думаю можно считать законченным! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2002, 08:45:49 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=32043386&tid=1821037]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
158ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
36ms |
get tp. blocked users: |
1ms |
| others: | 236ms |
| total: | 465ms |

| 0 / 0 |
