SQL 识别模式是否在文本字段中重复出现的查询
SQL Query that identifies if a pattern recurs in a text field
我正在尝试对我创建的日语词典数据库进行查询,该数据库识别重复的单词,例如 ニコニコ (niko niko)、ピカピカ (pika pika) 等单词。虽然我知道该怎么做 LIKE %%
查询,我不确定如何让它定义一个部分的模式并查看另一部分是否匹配它。
参数:
- 我要找的字都是4个双字节长
- 模式A由前两个字符组成,模式B由后两个字符组成
- 查询 运行 在结构相当简单的
headwords
table 上:它有两个字段,id
和 headword
- table 上的排序规则设置为
utf8_bin
- 我们要过滤以仅搜索长度为 4 个字符的词条,然后识别模式 A 并查看模式 B 是否相同。如果是这样,return
id
.
奖励: 如果有办法 运行 直接搜索 utf8
而不是 utf8_bin
,那将有助于选择一些额外的匹配项(例如 つれづれ tsure dure)。词条列上有一个 UNIQUE
索引,需要 utf8_bin
排序规则才能正确执行索引以进行正常操作。
数据和结果示例
根据 Strawberry 的建议添加
id | headword
=============
1 | たべる
2 | あらわれる
3 | ばかばかしい
4 | ニコニコ
5 | じゅんびする
6 | ぴかぴか
7 | する
8 | つれづれ
9 | ひとびと
10 | ひと
期望的结果将 return id
s 4
和 6
;最佳结果也将 return 8
和 9
.
1
太短了 1 个字符,模式 A (たべ
) 与模式 B (る
) 不匹配
2
太长了 1 个字符,模式 A (あら
) 与模式 B (われ
) 不匹配。 5
同上
3
匹配模式 A 和 B (ばか
),但是它太长了 6 个字符
7
和 10
太短了 2 个字符。虽然存在可能的模式 A(例如 10
中的 ひと
出现在 9
中的 ひとびと
中,但它的长度不足以提供模式 B 来与 [=67= 进行比较]
在 PHP 中,这就是您要查找的内容:preg_match('/^(..)$/u', 'ニコニコ')
将是 true
。
u
限定符表示字符是 utf8。
..
找到任意 2 个字符。
</code> 是对 <code>(..)
的反向引用,因此匹配重复项。
^
和 $
'anchor' 目标字符串开头和结尾的正则表达式。
'ニコニコ'
只是测试用例之一。
所以,从头开始,找到2个utf8字符,确保它们立即重复,后面没有其他内容。
我正在尝试对我创建的日语词典数据库进行查询,该数据库识别重复的单词,例如 ニコニコ (niko niko)、ピカピカ (pika pika) 等单词。虽然我知道该怎么做 LIKE %%
查询,我不确定如何让它定义一个部分的模式并查看另一部分是否匹配它。
参数:
- 我要找的字都是4个双字节长
- 模式A由前两个字符组成,模式B由后两个字符组成
- 查询 运行 在结构相当简单的
headwords
table 上:它有两个字段,id
和headword
- table 上的排序规则设置为
utf8_bin
- 我们要过滤以仅搜索长度为 4 个字符的词条,然后识别模式 A 并查看模式 B 是否相同。如果是这样,return
id
.
奖励: 如果有办法 运行 直接搜索 utf8
而不是 utf8_bin
,那将有助于选择一些额外的匹配项(例如 つれづれ tsure dure)。词条列上有一个 UNIQUE
索引,需要 utf8_bin
排序规则才能正确执行索引以进行正常操作。
数据和结果示例
根据 Strawberry 的建议添加
id | headword ============= 1 | たべる 2 | あらわれる 3 | ばかばかしい 4 | ニコニコ 5 | じゅんびする 6 | ぴかぴか 7 | する 8 | つれづれ 9 | ひとびと 10 | ひと
期望的结果将 return id
s 4
和 6
;最佳结果也将 return 8
和 9
.
1
太短了 1 个字符,模式 A (たべ
) 与模式 B (る
) 不匹配
2
太长了 1 个字符,模式 A (あら
) 与模式 B (われ
) 不匹配。5
同上
3
匹配模式 A 和 B (ばか
),但是它太长了 6 个字符7
和10
太短了 2 个字符。虽然存在可能的模式 A(例如10
中的ひと
出现在9
中的ひとびと
中,但它的长度不足以提供模式 B 来与 [=67= 进行比较]
在 PHP 中,这就是您要查找的内容:preg_match('/^(..)$/u', 'ニコニコ')
将是 true
。
u
限定符表示字符是 utf8。
..
找到任意 2 个字符。
</code> 是对 <code>(..)
的反向引用,因此匹配重复项。
^
和 $
'anchor' 目标字符串开头和结尾的正则表达式。
'ニコニコ'
只是测试用例之一。
所以,从头开始,找到2个utf8字符,确保它们立即重复,后面没有其他内容。