MySQL: SELECT 不同的正则表达式值
MySQL: SELECT DISTINCT REGEX value
在我的 MySQL 数据库中,我有一个名为 test_column
的行列,其中包含以下行:
dtq test dis
ged something fbd
edf something tds
zhs nothing edk
dda anything zhg
hvf nothing ert
asf nothing vbg
我要查找前三个字符和后三个字符之间的字符串。我可以像这样使用 REGEX 获取这些值:
^\w{3}\s(\w+)\s\w{3}$
我想 SELECT 区分这些值。
预期输出如下:
test
something
nothing
anything
如何使用 MySQL 命令执行此操作?
如果你是运行MySQL8.0,可以使用regexp_replace()
如下:
select distinct regexp_replace(col, '(^\w{3}\s)|(\s\w{3}$)', '') new_col from mytable
这是通过用空字符串替换第一个和最后一个单词(以及 following/preceding spaces)来实现的。第一个和最后一个字的长度必须为 3 个字符。
| new_col |
| :-------- |
| test |
| something |
| nothing |
| anything |
您可以使正则表达式更通用一些,这样它也可以接受长度不是 3 个字符的起始词和结束词以及超过一个字符的序列 space:
regexp_replace(col, '(^\w+\s+)|(\s+\w{+$)', '')
如果这就足够了,则不需要正则表达式
SUBSTRING_INDEX(col, ' ', 2)
但是,这假定您的“3 个字符”或 \w{3}
(实际上是 3 个字母数字字符)并不是真正的测试,而是 space 是关键。
如果这就是您想要的,则不需要正则表达式(删除前 4 个和后 4 个字符):
SELECT DISTINCT SUBSTRING(test_column,5,LENGTH(test_column)-8)
FROM mytable
或第一个 space 之后的所有内容,直到第二个 space:
SELECT DISTINCT SUBSTRING_INDEX(SUBSTRING_INDEX(test_column,' ',2),' ',-1)
FROM mytable
在我的 MySQL 数据库中,我有一个名为 test_column
的行列,其中包含以下行:
dtq test dis
ged something fbd
edf something tds
zhs nothing edk
dda anything zhg
hvf nothing ert
asf nothing vbg
我要查找前三个字符和后三个字符之间的字符串。我可以像这样使用 REGEX 获取这些值:
^\w{3}\s(\w+)\s\w{3}$
我想 SELECT 区分这些值。
预期输出如下:
test
something
nothing
anything
如何使用 MySQL 命令执行此操作?
如果你是运行MySQL8.0,可以使用regexp_replace()
如下:
select distinct regexp_replace(col, '(^\w{3}\s)|(\s\w{3}$)', '') new_col from mytable
这是通过用空字符串替换第一个和最后一个单词(以及 following/preceding spaces)来实现的。第一个和最后一个字的长度必须为 3 个字符。
| new_col | | :-------- | | test | | something | | nothing | | anything |
您可以使正则表达式更通用一些,这样它也可以接受长度不是 3 个字符的起始词和结束词以及超过一个字符的序列 space:
regexp_replace(col, '(^\w+\s+)|(\s+\w{+$)', '')
如果这就足够了,则不需要正则表达式
SUBSTRING_INDEX(col, ' ', 2)
但是,这假定您的“3 个字符”或 \w{3}
(实际上是 3 个字母数字字符)并不是真正的测试,而是 space 是关键。
如果这就是您想要的,则不需要正则表达式(删除前 4 个和后 4 个字符):
SELECT DISTINCT SUBSTRING(test_column,5,LENGTH(test_column)-8)
FROM mytable
或第一个 space 之后的所有内容,直到第二个 space:
SELECT DISTINCT SUBSTRING_INDEX(SUBSTRING_INDEX(test_column,' ',2),' ',-1)
FROM mytable