You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

SQL中下划线通配符使用后无数据返回?用法正确性排查

问题分析与解决方案

首先可以肯定的是,你的通配符使用确实可能是问题所在,我们一步步拆解来看:

核心问题:_通配符的匹配规则

在SQL的LIKE语法里,_代表匹配单个任意字符。你的查询Phone LIKE '360-287-_'是在找「以360-287-开头,且后面恰好只有1个字符」的手机号。如果你的实际数据中,360-287-后面跟着的是多个字符(比如常见的分机号是4位,比如360-287-1234),那这个通配符就完全匹配不到了。

这时候你应该用%通配符——它可以匹配任意长度的字符(包括0个),修正后的SQL应该是:

SELECT Phone FROM EMPLOYEE WHERE Phone LIKE '360-287-%'

额外需要排查的情况

如果换了%还是查不到,那得考虑这几个细节:

  • 字段是否有隐藏空格:比如数据里的Phone值前后有空格(比如360-287-1234或者360-287- 1234),这时候可以用TRIM函数去掉空格再匹配:
    SELECT Phone FROM EMPLOYEE WHERE TRIM(Phone) LIKE '360-287-%'
    
  • 字段类型是否非字符串:如果Phone字段是数字类型(比如INT),直接用LIKE会导致数据库自动转换格式,可能和你预期的字符串格式不符。这时候需要先把字段转成字符串类型再匹配,比如:
    -- MySQL/PostgreSQL 写法
    SELECT Phone FROM EMPLOYEE WHERE CAST(Phone AS VARCHAR) LIKE '360-287-%'
    
    -- Oracle 写法
    SELECT Phone FROM EMPLOYEE WHERE TO_CHAR(Phone) LIKE '360-287-%'
    
  • 是否需要转义特殊字符:如果你的数据里本身包含_,那需要转义,但你已经确认数据和搜索号码无拼写错误,这个可能性很低。

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

火山引擎 最新活动