Re[4]: mssql - форматирование datetime
От: SHEMA  
Дата: 31.08.09 13:48
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Здравствуйте, SHEMA, Вы писали:

SHE>>А если стоит задача, к примеру, сгруппировать данные по месяцам, как здесь обойтись без форматирования даты (поле timestamp)?
S>1. Поле timestamp в T-SQL никакого отношения к месяцам не имеет. http://msdn.microsoft.com/en-us/library/ms182776.aspx
S>2. Если речь про datetime, то надо пользоваться функцией DatePart.

Не сказу что ею (DatePart функцией) удобно пользоваться.
Допустим есть таблица c полем TimeStamp типа datetime.
Нужно сгруппировать данные по месяцам за все годы.

SQL Server:
select (...) from (...) group by DatePart(year, TimeStamp) + '-' + DatePart(month, TimeStamp)


А вот Oracle-овский вариант:
select (...) from (...) group by to_char(TimeStamp, 'YYYY-MM')


Иногда форматирование очень даже востребовано на сервере (особенно даты и время), и в случае с SQL Server-ом ето не самый удобный синтаксис (про эффективность тоже можно вспомнить), из-за отсутствия аналогов to_char/to_date приходится пользоваться такими вот самопалами.
Re[5]: mssql - форматирование datetime
От: Sinclair Россия https://github.com/evilguest/
Дата: 31.08.09 13:58
Оценка:
Здравствуйте, SHEMA, Вы писали:

SHE>SQL Server:

SHE>
select (...) from (...) group by DatePart(year, TimeStamp) + '-' + DatePart(month, TimeStamp)

Не надо так делать.
Надо делать так:
select (...) from (...) group by DatePart(year, TimeStamp), DatePart(month, TimeStamp)


SHE>Иногда форматирование очень даже востребовано на сервере (особенно даты и время), и в случае с SQL Server-ом ето не самый удобный синтаксис (про эффективность тоже можно вспомнить),

Ну, давайте вспомним про эффективность.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[6]: mssql - форматирование datetime
От: SHEMA  
Дата: 31.08.09 14:20
Оценка: :)
Здравствуйте, Sinclair, Вы писали:

SHE>>SQL Server:

SHE>>
select (...) from (...) group by DatePart(year, TimeStamp) + '-' + DatePart(month, TimeStamp)

S>Не надо так делать.
S>Надо делать так:
S>
select (...) from (...) group by DatePart(year, TimeStamp), DatePart(month, TimeStamp)


S>Ну, давайте вспомним про эффективность.


Ну давайте: Sql Server-ный вариант предполагает либо 1) два вызова DatePart плюс склеивание строк, либо 2) два вызова DatePart плюс группировка по двум полям. Oracle обходится одним вызовом функции и группировкой по одному полю. Вывод очевиден.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.