Запрос Sqlite для получения следующего доступного символа текста поиска, который содержит имя или фамилию - PullRequest
1 голос
/ 01 июня 2019

Как запросить базу данных sqlite, чтобы получить список следующих доступных символов после ключевого слова поиска в двух столбцах. например, если ключевое слово для поиска - "и" и пусть столбцы будут именем и фамилией:

And[y] Xyz
And[r]ew And[z]
Xyz And[o]n
Mirand[a] Lorand[e]

тогда я должен получить символы [y, r, z, o, a, e].

Я пытался использовать substr и instr, но я не смог написать запрос, который просматривал бы как имя, так и фамилию и возвращал следующий символ в обоих из них.

1 Ответ

0 голосов
/ 01 июня 2019

С UNION ALL для значений из 2 столбцов и с помощью rowid для получения правильного порядка:

select nextchar from (
  select
    1 col, 
    rowid,
    substr(firstname, instr(lower(firstname), 'and') + 3, 1) nextchar
  from names 
  where firstname like '%and%'
  union all 
  select
    2, 
    rowid,
    substr(lastname, instr(lower(lastname), 'and') + 3, 1)
  from names 
  where lastname like '%and%'
) t
order by t.rowid, t.col

См. Демоверсию .
Результаты:

| nextchar |
| -------- |
| y        |
| r        |
| z        |
| o        |
| a        |
| e        |

Если вы хотите получить результат в виде строки, разделенной запятыми, используйте group_concat():

select group_concat(nextchar) chars from (
  select nextchar from (
    select
      1 col, 
      rowid,
      substr(firstname, instr(lower(firstname), 'and') + 3, 1) nextchar
    from names 
    where firstname like '%and%'
    union all 
    select
      2, 
      rowid,
      substr(lastname, instr(lower(lastname), 'and') + 3, 1)
    from names 
    where lastname like '%and%'
  ) t
  order by t.rowid, t.col
)

См. Демоверсию .
Результат:

| chars       |
| ----------- |
| y,r,z,o,a,e |
...