gpt4 book ai didi

MySQL 按 REGEXP 分组

转载 作者:行者123 更新时间:2023-11-30 01:01:18 25 4
gpt4 key购买 nike

我正在尝试获取 MySQL 表 translations 字段中使用的缩写的完整列表。这就是我的表格条目的样子

  -english-               -german-

to hit sb. | jmd. schlagen
so. stole my bike | jd. hat mein Fahrrad gestohlen
I am tall | ich bin gross
to see sb. | jmd. sehen
1, 2, 3, etc. | 1, 2, 3, usw.
tree | Baum
...

使用 MySQL SELECT 查询SELECT english FROM Translations WHERE english REGEXP '[a-zA-Z]{2,}[.]' GROUP BY english 我可以显示包含缩写的所有行,即

  -english-               -german-

to hit sb. | jmd. schlagen
so. stole my bike | jd. hat mein Fahrrad gestohlen
to see sb. | jmd. sehen
1, 2, 3, etc. | 1, 2, 3, usw.
...

结果已分组,因此不会显示任何两行具有相同字段 english 内容的行。然而,多次出现的缩写会单独列出,即 sb. 出现两次。由于翻译行数较多(约千万行),因此出现了太多常见缩写,例如sb.sth.因此创建不同缩写的列表会非常耗时。

我想知道是否有一种方法可以按 REGEXP 模式的出现进行分组,例如从翻译中选择英语 WHERE 英语 REGEXP '[a-zA-Z]{2,}[.]' GROUP BY 英语 REGEXP '[a-zA-Z]{2,}[.]'

我只需要编写此列表一次,这就是我在 phpMyAdmin 中工作的原因。

最佳答案

关于第三范式的好建议,但为了快速,我会尝试如下:

SELECT
reverse(substring(reverse(english)
, locate('.', reverse(english))
, locate(' ', concat(reverse(english), ' '), locate('.', reverse(english))) - locate('.', reverse(english))
)) AS abbr
FROM translations
WHERE english LIKE '%.%'
GROUP BY abbr

这会反转字符串,使 abbr. 变为 .rbba,然后查找一个点和点后的第一个空格(我们在开头连接一个空格(现在结尾),以防没有。现在您有了一个分组依据的值。

这只会找到最后一个缩写。在现场。

fiddle :http://sqlfiddle.com/#!2/b2e1b/11/0

关于MySQL 按 REGEXP 分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20106803/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com