Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Оптимизация строки  [new]
Azvaal
Member

Откуда: Москва
Сообщений: 215
Доброго дня, коллеги.

Хотел бы узнать, как можно оптимальнее вычислить пятое число следующего месяца? Поиск по сайту ничего не выдал, к сожалению.

dateadd(m,1,left(convert(varchar(8),@Date,112),6)+'05')
21 июл 16, 12:28    [19435554]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация строки  [new]
Konst_One
Member

Откуда:
Сообщений: 11621
dateadd может d принимать как параметр
21 июл 16, 12:31    [19435572]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация строки  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
DATEADD(DAY,4,DATEADD(MONTH,DATEDIFF(MONTH,0,@Date)+1,0))
21 июл 16, 12:39    [19435643]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация строки  [new]
Azvaal
Member

Откуда: Москва
Сообщений: 215
iap,

ваш вариант интереснее конечно, но чем он оптимальнее?
21 июл 16, 14:05    [19436455]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация строки  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Azvaal
iap,

ваш вариант интереснее конечно, но чем он оптимальнее?
Не знаю! :))
21 июл 16, 14:09    [19436489]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация строки  [new]
Azvaal
Member

Откуда: Москва
Сообщений: 215
iap,

а интересно: взято из опыта или придумано на ходу?
21 июл 16, 14:14    [19436531]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация строки  [new]
o-o
Guest
Вы фигней какой-то занимаетесь, ну какая уже разница, кск вычислить несчастный скаляр?
Не загнали это все в скалярку, уже прекрасно.
Время сервер тратит не на 2/3 арифметические операции, а на поднятие гигабайтов с диска, лучше число чтений уменьшайте, чем даты корежить
21 июл 16, 14:14    [19436536]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация строки  [new]
Azvaal
Member

Откуда: Москва
Сообщений: 215
o-o,

Спасибо за мнение
21 июл 16, 14:20    [19436593]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация строки  [new]
o-o
Guest
Да пожалуйста.
Вы еще мнение сервера опросите,
добавив в начало скрипта set statistics time on.
Засеките все предложенные варианты, и лучше несколько раз, и посмотрите, есть ли хоть какая-то разница
21 июл 16, 14:23    [19436630]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация строки  [new]
invm
Member

Откуда: Москва
Сообщений: 9827
Azvaal,

Если для вас так важна оптимальность скалярных выражений, то можете упростить собственное:
dateadd(m,1,convert(varchar(6),@Date,112)+'05')
21 июл 16, 14:51    [19436848]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация строки  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
invm
Azvaal,

Если для вас так важна оптимальность скалярных выражений, то можете упростить собственное:
dateadd(m,1,convert(varchar(6),@Date,112)+'05')
Можно ещё короче оптимальнее:
dateadd(m,1,convert(char(6),@Date,112)+'05')
на три буквы!
21 июл 16, 14:54    [19436866]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация строки  [new]
edyaN
Member

Откуда: Berlin
Сообщений: 185
iap
invm
Azvaal,

Если для вас так важна оптимальность скалярных выражений, то можете упростить собственное:
dateadd(m,1,convert(varchar(6),@Date,112)+'05')
Можно ещё короче оптимальнее:
dateadd(m,1,convert(char(6),@Date,112)+'05')
на три буквы!


<зануда>
convert в любом случаяе медленнее
</зануда>
21 июл 16, 16:15    [19437542]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация строки  [new]
iiyama
Member

Откуда:
Сообщений: 642
экономим еще 16 символов :)
DATEADD(d,5, EOMONTH(@date))
21 июл 16, 17:07    [19437843]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация строки  [new]
Konst_One
Member

Откуда:
Сообщений: 11621
EOMONTH

только для баз 2012+
21 июл 16, 17:11    [19437866]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация строки  [new]
iiyama
Member

Откуда:
Сообщений: 642
Konst_One,
кстати, навели на мысль, повышение оптимальности вычисления скаляра посредством увеличения версии сервера
сорри, не удержался
21 июл 16, 17:41    [19438018]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация строки  [new]
Konst_One
Member

Откуда:
Сообщений: 11621
iiyama
Konst_One,
кстати, навели на мысль, повышение оптимальности вычисления скаляра посредством увеличения версии сервера
сорри, не удержался


=)
21 июл 16, 17:42    [19438024]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация строки  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
iiyama,
на 1кк итераций
1. DATEADD(DAY,4,DATEADD(MONTH,DATEDIFF(MONTH,0,@Date)+1,0))
2. EOMONTH +7-10%
3. dateadd(m,1,left(convert(varchar(8),@Date,112),6)+'05') +35-40%
21 июл 16, 17:45    [19438053]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация строки  [new]
sergeimv
Member

Откуда: Россия, г.Казань
Сообщений: 42
Еще чуть короче ))):
dateadd(m,datediff(m,0,@date)+1,0)+4
21 июл 16, 18:13    [19438209]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация строки  [new]
o-o
Guest
iiyama
Konst_One,
кстати, навели на мысль, повышение оптимальности вычисления скаляра посредством увеличения версии сервера
сорри, не удержался

да скорее придется понижать версию,
если именно производительность интересует, а не число символов на строку кода.
например, нововведенные PARSE и FORMAT куда тормознутее,
чем тот же старый добрый CONVERT
21 июл 16, 18:26    [19438255]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация строки  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8807
Новомодные функции - СLR, а не С++. Впрочем, для большинства задач достаточно эффективны.
22 июл 16, 12:39    [19440880]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация строки  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8807
Azvaal
iap,

ваш вариант интереснее конечно, но чем он оптимальнее?


конкатенация - обычно затратная операция, т.к. требует выделения заранее неизвестного объема памяти в отличие от целочисленных вычислений.
22 июл 16, 12:44    [19440918]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация строки  [new]
Azvaal
Member

Откуда: Москва
Сообщений: 215
Владислав Колосов,

Спасибо за ответ
25 июл 16, 15:00    [19451802]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить