You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL中LIKE查询如何匹配字段长度一致的结果?

解决LIKE匹配时严格对应子串内容与长度的问题

你可以通过正则表达式匹配单词边界来实现只匹配独立的、长度与conclusion_number完全一致的子串,避免它成为其他更长字母数字序列的一部分。以下是不同数据库的具体实现方式:

1. PostgreSQL

使用正则匹配运算符~(区分大小写)或~*(不区分大小写),结合单词边界符\m(单词开头)和\M(单词结尾):

SELECT rg.task_id, a.id, a.conclusion_number, a.expertize_number, rg.id
FROM registration rg
JOIN audit a ON rg.expertize_number ~* ('\m' || a.conclusion_number || '\M')
WHERE rg.task_id = '23402928';

2. MySQL

使用REGEXP关键字,结合MySQL专属的单词边界符[[:<:]]和[[:>:]]:

SELECT rg.task_id, a.id, a.conclusion_number, a.expertize_number, rg.id
FROM registration rg
JOIN audit a ON rg.expertize_number REGEXP CONCAT('[[:<:]]', a.conclusion_number, '[[:>:]]')
WHERE rg.task_id = '23402928';

3. SQL Server

由于SQL Server的LIKE不支持原生单词边界,需手动判断子串前后是否为非字母数字字符,或子串位于字符串首尾:

SELECT rg.task_id, a.id, a.conclusion_number, a.expertize_number, rg.id
FROM registration rg
JOIN audit a ON 
    -- 子串前后有非字母数字分隔符
    rg.expertize_number LIKE '%[^a-zA-Z0-9]' + a.conclusion_number + '[^a-zA-Z0-9]%'
    -- 子串位于字符串开头,后续为非字母数字
    OR rg.expertize_number LIKE a.conclusion_number + '[^a-zA-Z0-9]%'
    -- 子串位于字符串结尾,前面为非字母数字
    OR rg.expertize_number LIKE '%[^a-zA-Z0-9]' + a.conclusion_number
    -- 子串与整个字符串完全相等
    OR rg.expertize_number = a.conclusion_number
WHERE rg.task_id = '23402928';

如果你的需求仅为确保conclusion_number与expertize_number中的子串长度一致且内容匹配(不限制前后字符),原LIKE条件本身已满足;若需避免子串成为其他字母数字序列的一部分,上述正则方案更贴合需求。

内容的提问来源于stack exchange,提问作者Islom

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 02:15:54