|
|
|
Помогите строчку сравнить
|
|||
|---|---|---|---|
|
#18+
Всем привет. Помогите с такой засадой. Надо в процедуре выбирать данные в зависимости от параметра (строка). Если параметр пустой (не NULL, просто пустая строка) - выбирать все, если в параметре что-то есть, выбирать по маске. Пытаюсь сделать простой селект (пока ещё не в процедуре, просто в ibexpert-е): Код: sql 1. 2. 3. фигня какая-то. Если name пустой - всё выбирается. Если что-то есть (например, 'A%') - высыпается ошибка: Код: plaintext 1. 2. 3. 4. Не могу понять, что с чем не совместимо? :name имеет тип VARCHAR(31). Колонка symbol_name - тоже. То же самое для целочисленных значений работает норм Код: sql 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2014, 17:39 |
|
||
|
Помогите строчку сравнить
|
|||
|---|---|---|---|
|
#18+
13thНадо в процедуре выбирать данные в зависимости от параметра (строка). Обоснуй выделенное. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2014, 17:47 |
|
||
|
Помогите строчку сравнить
|
|||
|---|---|---|---|
|
#18+
Hello, 13th! You wrote on 4 июля 2014 г. 17:50:51: 13th> where upper(symbol_name) like case coalesce(:name, '') when '' then upper(symbol_name) else upper(:name) end бессмысленный набор букв Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2014, 17:52 |
|
||
|
Помогите строчку сравнить
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, Хочу весь SQL вынести из cpp-кода. Не удобно писать, отлаживать. Хочу уйти от методики сборки SQL-выражений на стороне клиент - считаю это плохим стилем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2014, 18:18 |
|
||
|
Помогите строчку сравнить
|
|||
|---|---|---|---|
|
#18+
13thВсем привет. Помогите с такой засадой. Надо в процедуре выбирать данные в зависимости от параметра (строка). Если параметр пустой (не NULL, просто пустая строка) - выбирать все, если в параметре что-то есть, выбирать по маске. Ну так выбирай по маске всегда (заменяй пустую строку параметра на '%' перед селектом) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2014, 18:19 |
|
||
|
Помогите строчку сравнить
|
|||
|---|---|---|---|
|
#18+
Мимопроходящий, ну, я раньше на T_SQL писал. Если это - бессмыслица, покажи как надо, о великий мастер. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2014, 18:19 |
|
||
|
Помогите строчку сравнить
|
|||
|---|---|---|---|
|
#18+
13thМимопроходящий, ну, я раньше на T_SQL писал. Если это - бессмыслица, покажи как надо, о великий мастер. и там нет логических операций? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2014, 18:22 |
|
||
|
Помогите строчку сравнить
|
|||
|---|---|---|---|
|
#18+
m7m, проблема, как раз, не с пустой строкой, а с заполненной. Почитай внимательно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2014, 18:24 |
|
||
|
Помогите строчку сравнить
|
|||
|---|---|---|---|
|
#18+
Hello, 13th! You wrote on 4 июля 2014 г. 18:25:40: 13th> ну, я раньше на T_SQL писал. и для T-SQL это бессмыслица. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2014, 18:27 |
|
||
|
Помогите строчку сравнить
|
|||
|---|---|---|---|
|
#18+
m7mи там нет логических операций? они там есть. Ты клонишь к тому, что бы написать if длина_строки < 1 then шаблон='%' Select ... where SYMBOL_NAME LIKE шаблон. но у меня выборки не только по строковым значениям. по целым, по даблам, по датам/времени. Хочу написать единообразный код. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2014, 18:28 |
|
||
|
Помогите строчку сравнить
|
|||
|---|---|---|---|
|
#18+
13thХочу весь SQL вынести из cpp-кода. Не удобно писать, отлаживать. Хочу уйти от методики сборки SQL-выражений на стороне клиент - считаю это плохим стилем. Перехоти. Удобства это не прибавит. Стиль как стиль. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2014, 18:30 |
|
||
|
Помогите строчку сравнить
|
|||
|---|---|---|---|
|
#18+
13thХочу написать единообразный код тогда пиши так: Код: sql 1. 2. 3. 4. Что я там выше сказал про удобство и простоту?.. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2014, 18:35 |
|
||
|
Помогите строчку сравнить
|
|||
|---|---|---|---|
|
#18+
13thm7m, проблема, как раз, не с пустой строкой, а с заполненной. Почитай внимательно. у меня не хватает терпения вчитываться в вот такое Код: sql 1. 13thm7mи там нет логических операций? они там есть. Ты клонишь к тому, что бы написать if длина_строки < 1 then шаблон='%' Select ... where SYMBOL_NAME LIKE шаблон. но у меня выборки не только по строковым значениям. по целым, по даблам, по датам/времени. Хочу написать единообразный код. таки да или Код: sql 1. 2. но тогда записи с SYMBOL_NAME равными NULL не попадут в выборку или Код: sql 1. впрочем и первый и второй вариант гарантирует не использование индексов и соответственно тормоза при выборке из большой таблицы (если конечно не будет дополнительных условий выборки) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2014, 18:37 |
|
||
|
Помогите строчку сравнить
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovПерехоти. Удобства это не прибавит. Стиль как стиль. Проекта моего ты в глаза не видел. Даже не знаешь, сколько у меня таких процедур получится - 4 или 400. Даже не знаешь, в результате чего такое решение было принято и как обосновывалось. И так дерзко: "перехоти". Достаточно самоуверенно. Или обоснуй, или не засирай в мой тред. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2014, 18:40 |
|
||
|
Помогите строчку сравнить
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov Код: sql 1. 2. 3. 4. Что я там выше сказал про удобство и простоту?.. Ух ты, а я то и не догадался... А как это будет выглядеть для 6 параметров? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2014, 18:41 |
|
||
|
Помогите строчку сравнить
|
|||
|---|---|---|---|
|
#18+
m7m, Если тебе удобнее, пусть будет так: Код: sql 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2014, 18:45 |
|
||
|
Помогите строчку сравнить
|
|||
|---|---|---|---|
|
#18+
13thИли обоснуй, или не засирай в мой тред. Обосновываю: читай внимательно сообщение m&m. Особенно внимательно - в месте про использование индексов. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2014, 18:46 |
|
||
|
Помогите строчку сравнить
|
|||
|---|---|---|---|
|
#18+
m7mвпрочем и первый и второй вариант гарантирует не использование индексов и соответственно тормоза при выборке из большой таблицы (если конечно не будет дополнительных условий выборки) Поясни: оператор LIKE или CASE отрубает индексы? Я в IB не большой спец, но в MS сервере что LIKE, что CASE вполне работал по индексам ещё в версии 6.0. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2014, 18:48 |
|
||
|
Помогите строчку сравнить
|
|||
|---|---|---|---|
|
#18+
13thв MS сервере что LIKE, что CASE вполне работал по индексам ещё в версии 6.0. Врёшь. Покажи план твоего запроса из предыдущего поста в MS SQL. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2014, 18:52 |
|
||
|
Помогите строчку сравнить
|
|||
|---|---|---|---|
|
#18+
13thm7mвпрочем и первый и второй вариант гарантирует не использование индексов и соответственно тормоза при выборке из большой таблицы (если конечно не будет дополнительных условий выборки) Поясни: оператор LIKE или CASE отрубает индексы? Я в IB не большой спец, но в MS сервере что LIKE, что CASE вполне работал по индексам ещё в версии 6.0. LIKE с параметром индекс "отрубает" LIKE с константой 'AA%' равносилен STARTING WITH и использует индекс (впрочем я в этом не совсем уверен, а искать или пробовать лень) про остальное (CASE, MSSQL) не знаю ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2014, 18:56 |
|
||
|
Помогите строчку сравнить
|
|||
|---|---|---|---|
|
#18+
m7mLIKE с параметром индекс "отрубает" LIKE с константой 'AA%' равносилен STARTING WITH и использует индекс (впрочем я в этом не совсем уверен, а искать или пробовать лень) Блин, засада. Ладно, спасибо, с этим понятно, переделаю запрос в STARTING WITH. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2014, 19:00 |
|
||
|
Помогите строчку сравнить
|
|||
|---|---|---|---|
|
#18+
Модератор: Предупреждение. Если позволишь себе тут пИсаться в таком стиле - лучше сразу иди на другой форум. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2014, 19:09 |
|
||
|
Помогите строчку сравнить
|
|||
|---|---|---|---|
|
#18+
13thm7mLIKE с параметром индекс "отрубает" LIKE с константой 'AA%' равносилен STARTING WITH и использует индекс (впрочем я в этом не совсем уверен, а искать или пробовать лень) Блин, засада. Ладно, спасибо, с этим понятно, переделаю запрос в STARTING WITH. Ну тогда и заботиться о пустой строке не надо будет ибо Код: sql 1. должен работать и при param='' ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2014, 19:11 |
|
||
|
Помогите строчку сравнить
|
|||
|---|---|---|---|
|
#18+
m7mдолжен работать и при param='' Но результат будет сильно зависеть от версии сервера и, возможно, коллейта. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2014, 19:14 |
|
||
|
Помогите строчку сравнить
|
|||
|---|---|---|---|
|
#18+
m7mдолжен работать и при param='' Да, работает, я уже проверил. Кстати, выражение Код: sql 1. 2. 3. 4. 5. всёж использует индекс: Код: plaintext 1. Так что не всё пропало (: ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2014, 19:22 |
|
||
|
|

start [/forum/topic.php?fid=40&msg=38688350&tid=1563482]: |
0ms |
get settings: |
8ms |
get forum list: |
8ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
369ms |
get topic data: |
5ms |
get forum data: |
2ms |
get page messages: |
38ms |
get tp. blocked users: |
1ms |
| others: | 223ms |
| total: | 658ms |

| 0 / 0 |
