MySQL:如何选择表的某些行并执行SUBSTRING_INDEX

时间:2016-09-23 16:59:22

标签: mysql string

我找不到正确的答案,对一个非常简单的任务更加困惑。

我有什么话:

sun
fun
dark
light
clunch
cruca
suda
muda

我想获得结果

un
unch
uca
uda

我现在在哪里:

 sun
 fun
 null
 null
 clunch
 cruca
 suda
 muda

我非常简单的初学者代码:

SELECT * FROM table WHERE title REGEXP '[u]{1}[a-tv-z]{1,3}$';
SELECT SUBSTRING_INDEX(??????,'a',-1);

我知道我只能将一个值传递给该函数。我已经尝试过创建一个临时表但我真的被困了。

CREATE TEMPORARY TABLE t1 (SELECT * FROM table WHERE title REGEXP '[u]{1}[a-tv-z]{1,3}$')

请你给我一个小提示,告诉我如何连续执行几个命令并将结果从一个步骤传递到另一个步骤?此外,我想拥有单词的独特结尾并消除重复。

3 个答案:

答案 0 :(得分:1)

你想在这里做两件事:

  1. 仅选择包含“un”
  2. 的行
  3. 这些行,只选择以'un'开头
  4. 开头的文字

    要自己实现第一部分,请使用WHERE子句:

    SELECT title FROM table WHERE title LIKE '%un%'
    

    那会给你

    sun
    fun
    clunch
    

    但那是SELECT整个title - 你只想让部分以'un'开头。所以你现在改变SELECT。您需要从“un”的位置开始的子字符串。像这样:

    SELECT SUBSTR(title, LOCATE(title, "un")) FROM table WHERE title LIKE '%un%'
    

    现在你会看到

    un
    un
    unch
    

答案 1 :(得分:0)

使用LIKE作为过滤器尝试此查询:

SELECT SUBSTR(title, LOCATE(title, "un")) FROM table WHERE title LIKE '%un%';

如果你必须使用SUBSTR_INDEX,试试这个(假设子串“un”只出现一次)

SELECT SUBSTR(title, SUBSTR_INDEX(title, "un", -1)) FROM table WHERE title LIKE '%un%';

答案 2 :(得分:0)

这就是诀窍!感谢您的指导!

SELECT DISTINCT(
SUBSTR(title, - 5 + LOCATE('u', SUBSTR(title, - 4))))
FROM table WHERE title REGEXP '[u]{1}[a-tv-z]{1,3}$'