0

我正在将数据库导入到 DB Browser SQLite,需要执行 SQL 并剪切最后一个单词,包括红色圆圈中的“-”,用于数据库中“slug”下的所有行。

在此处输入图像描述

有什么命令可以做到这些吗?

谢谢

4

3 回答 3

1

是否有任何命令可以执行 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的新列

例如,如果输入表是(数据不同,因为我不会尝试从屏幕截图中复制,也不会尝试计算最后一个单词是否相同长度):-

在此处输入图像描述

上述结果将是:-

在此处输入图像描述

于 2018-11-23T06:15:32.510 回答
1

结尾的字符串看起来都一样长。如果是这样,您可以这样做:

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

其中<n>是要删除的字符串的长度。

于 2018-11-23T03:27:11.060 回答
0

从 xxx 中选择 SUBSTRING_INDEX(slug,"-", -1)。

于 2018-11-23T03:39:02.587 回答