Есть ли команда для выполнения SQL и вырезать последние слова в строке базы данных? - PullRequest
0 голосов
/ 23 ноября 2018

Я импортирую базу данных в браузер БД SQLite, и мне нужно выполнить SQL и вырезать последние слова, включающие '-', как в красном кружке для всех строк в базе данных 'slug'.

enter image description here

Есть ли какая-либо команда, чтобы сделать это?

Спасибо

Ответы [ 3 ]

0 голосов
/ 23 ноября 2018

выберите SUBSTRING_INDEX (slug, "-", -1) из xxx.

0 голосов
/ 23 ноября 2018

Есть ли какая-либо команда для выполнения SQL и вырезания последних слов в строке базы данных?

Короче №.

Однако вы можете извлечь последнее слово, но было бы обременительно, если бы не было более конкретного слова, такого как длина.

Вероятно, было бы гораздо продуктивнее спроектировать базу данных с учетом ее предполагаемого использования.

Например, следующее извлечет последнее слово со следующими предположениями / условиями / ограничениями: -

  • Последнее слово имеет длину не менее 1 символа и не более 30 символов вдлина.
  • Существует только один символ-разделитель, а именно - .

: -

SELECT *,
    CASE 
        WHEN instr(substr(slug,length(slug) -2),'-') > 0
            THEN substr(slug,length(slug)-1)
        WHEN instr(substr(slug,length(slug) -3),'-') > 0
            THEN substr(slug,length(slug)-3)
        WHEN instr(substr(slug,length(slug) -4),'-') > 0
            THEN substr(slug,length(slug)-4)
        WHEN instr(substr(slug,length(slug) -5),'-') > 0
            THEN substr(slug,length(slug)-4)
        WHEN instr(substr(slug,length(slug) -6),'-') > 0
            THEN substr(slug,length(slug)-5)
        WHEN instr(substr(slug,length(slug) -7),'-') > 0
            THEN substr(slug,length(slug)-6)
        WHEN instr(substr(slug,length(slug) -8),'-') > 0
            THEN substr(slug,length(slug)-7)
        WHEN instr(substr(slug,length(slug) -9),'-') > 0
            THEN substr(slug,length(slug)-8)
        WHEN instr(substr(slug,length(slug) -10),'-') > 0
            THEN substr(slug,length(slug)-9)
        WHEN instr(substr(slug,length(slug) -11),'-') > 0
            THEN substr(slug,length(slug)-10)
        WHEN instr(substr(slug,length(slug) -12),'-') > 0
            THEN substr(slug,length(slug)-11)
        WHEN instr(substr(slug,length(slug) -13),'-') > 0
            THEN substr(slug,length(slug)-12)
        WHEN instr(substr(slug,length(slug) -14),'-') > 0
            THEN substr(slug,length(slug)-13)
        WHEN instr(substr(slug,length(slug) -15),'-') > 0
            THEN substr(slug,length(slug)-14)
        WHEN instr(substr(slug,length(slug) -16),'-') > 0
            THEN substr(slug,length(slug)-15)
        WHEN instr(substr(slug,length(slug) -17),'-') > 0
            THEN substr(slug,length(slug)-16)
        WHEN instr(substr(slug,length(slug) -18),'-') > 0
            THEN substr(slug,length(slug)-17)
        WHEN instr(substr(slug,length(slug) -19),'-') > 0
            THEN substr(slug,length(slug)-18)
        WHEN instr(substr(slug,length(slug) -20),'-') > 0
            THEN substr(slug,length(slug)-19)
        WHEN instr(substr(slug,length(slug) -21),'-') > 0
            THEN substr(slug,length(slug)-20)
        WHEN instr(substr(slug,length(slug) -22),'-') > 0
            THEN substr(slug,length(slug)-21)
        WHEN instr(substr(slug,length(slug) -23),'-') > 0
            THEN substr(slug,length(slug)-22)
        WHEN instr(substr(slug,length(slug) -24),'-') > 0
            THEN substr(slug,length(slug)-23)
        WHEN instr(substr(slug,length(slug) -25),'-') > 0
            THEN substr(slug,length(slug)-24)
        WHEN instr(substr(slug,length(slug) -26),'-') > 0
            THEN substr(slug,length(slug)-25)
        WHEN instr(substr(slug,length(slug) -27),'-') > 0
            THEN substr(slug,length(slug)-26)
        WHEN instr(substr(slug,length(slug) -28),'-') > 0
            THEN substr(slug,length(slug)-27)
        WHEN instr(substr(slug,length(slug) -29),'-') > 0
            THEN substr(slug,length(slug)-28)
        WHEN instr(substr(slug,length(slug) -30),'-') > 0
            THEN substr(slug,length(slug)-29)
        ELSE 'ooops not found'
    END AS lastword
FROM mytable;
  • Вышесоответственно, может быть короче, если минимальная длина последнего слова была больше 1 и / или максимальная длина меньше 30
  • . Приведенный выше выводит все столбцы таблицы плюс новый с именем lastword

Например, если входная таблица была ( данные отличаются, я не собирался ни пытаться копировать со скриншота, ни подсчитывать, чтобы увидеть, были ли последние словатой же длины ): -

enter image description here

Результат из вышеперечисленного будет: -

enter image description here

0 голосов
/ 23 ноября 2018

Конечные строки выглядят так, как будто они имеют одинаковую длину.Если это так, вы можете сделать:

select substr(slug, 1, length(slug) - <n>)

, где <n> - длина удаляемой строки.

...