|
|
|
Поиск подстроки по строке (не так просто, как кажется)
|
|||
|---|---|---|---|
|
#18+
Всем доброго времени суток! Может повторяюсь, но полтора часа поиска по форуму ничего не дали. Проблема: конструкция запроса SELECT string FROM table WHERE string LIKE 'substring%'; -> выберет строку string из табл. table, совпавшую по началу с substring. У меня же string и substring поменяны местами, т.е. в таблице table хранятся варианты substring, а string подставляется в запрос. Т.е.: Код: plaintext 1. 2. 3. 4. 5. 6. 7. Код: plaintext 1. Код: plaintext 1. 2. 3. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Также обязательное условие - если в таблице будут значения substring 0aa0 и 0aa , необходимо чтобы совпадение происходило по наидлиннейшему, т.е. по 0aa0 , и возвращало id только этого совпадения. Подскажите, кто сталкивался - я уже всю голову сломал :( БД - PostgreSQL 8.3.5/Linux ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2009, 00:42 |
|
||
|
Поиск подстроки по строке (не так просто, как кажется)
|
|||
|---|---|---|---|
|
#18+
Вам сюда , однако. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2009, 00:44 |
|
||
|
Поиск подстроки по строке (не так просто, как кажется)
|
|||
|---|---|---|---|
|
#18+
Alex LavrinenkoПроблема в том, что приаттачить '%' к концу substring в запросе нельзя - ошибка синтаксиса: Код: plaintext 1. 2. 3. строки в PotgsreSQL соединяются оператором || попробуйте: Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2009, 00:52 |
|
||
|
Поиск подстроки по строке (не так просто, как кажется)
|
|||
|---|---|---|---|
|
#18+
Ёшстроки в PotgsreSQL соединяются оператором || попробуйте: Код: plaintext Спасибо за оперативный ответ, именно эту конструкцию пробовал в самом начале - возвращала несколько строк. Сейчас создал новую тестовую таблицу и сразу нашёл ошибку - если в поле substring будет не NULL (а например ''), то эта строка тоже попадёт под критерий отбора. А у меня как раз в таблице несколько строк с (как я думал) пустыми значениями substring - вот они-то и возвращались... Походу придётся пересоздать таблицу с substring varchar(n) DEFAULT NULL и вместо '' явно инсертить NULL для substring, если там ничего не должно быть. Ну или буду сейчас реализовывать longest match limit 1, он точно вернёт только одно наидлиннейшее совпадение, как раз по заданию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2009, 01:13 |
|
||
|
Поиск подстроки по строке (не так просто, как кажется)
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. AlexandrN© ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2009, 11:49 |
|
||
|
Поиск подстроки по строке (не так просто, как кажется)
|
|||
|---|---|---|---|
|
#18+
Alexandr Nikolaev Код: plaintext 1. 2. 3. AlexandrN© Тёзка, спасибо. Ваш вариант сложнее :-) Проблему уже решил, таким образом: Код: plaintext 1. Код: plaintext 1. 2. 3. 4. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. В целом, с граблей слез, проблема решена, тему можно в фак :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2009, 13:09 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=35945802&tid=1543293]: |
0ms |
get settings: |
4ms |
get forum list: |
11ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
153ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
40ms |
get tp. blocked users: |
1ms |
| others: | 250ms |
| total: | 474ms |

| 0 / 0 |
