У меня проблема, которая сначала кажется простой, но на самом деле это не так. Я хранение слов в таблице таким образом, что пара строк «A B C D E» и «D E F» становится:Как подсчитать каждое слово в строке в цикле ORACLE?
id value
-- -----
1 A
1 B
1 C
1 D
1 E
2 D
2 E
2 F
И я перейти к моей ORACLE процедуры строку, которая выглядит следующим образом: «A B C D G». И теперь я хочу проверить процентное сходство между строками в базе данных и строку, переданную как параметр.
Я предполагаю, что мне нужно использовать одну из функций split и использовать массив. Позже проверьте, происходит ли каждое слово в переданной строке в таблице, а затем подсчитывает идентификаторы. Но есть поворот: мне нужно точное процентное значение.
Таким образом, результат, полученный в примере выше, должно выглядеть следующим образом:
id percentage
-- ----------
1 80 -- 4 out of 5 letters exists in query string (A B C D)
2 33 -- 1 out of 3 (D)
Итак, мои вопросы:
- что является наиболее эффективным способом, чтобы разделить строку запроса, а затем итерацию по нему (таблица ?)
- как сохранить частичные результаты, а затем подсчитать их?
- как считать итоговое процентное значение?
Каждая помощь была бы принята с благодарностью.
Спасибо! Ваше решение очень помогло мне, это было совсем не то, что мне нужно, но это подтолкнуло меня в правильном направлении. В конце концов, мне придется использовать split, потому что мне нужно подсчитывать каждое значение любого значения, а не всю строку. Поэтому в моем случае я должен использовать что-то вроде: sum (случай, когда значение IN ('A', 'B', 'C', 'D', 'G'), затем 1 else 0)/count (*) Итак, вся строка должна быть разделена:/ – Ziouas
Ну, это работает, когда вы меняете порядок аргументов :) instr (value, 'ABCD G') не работает, но instr ('ABCD G', value) отлично работает , Спасибо, Бен! – Ziouas
oops @ Ziouas, да ... извините, что привык писать его наоборот. Я отредактировал свой ответ, поэтому теперь он имеет больше смысла! – Ben