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

如何用CHARINDEX()查找Name字段中首个Unicode字符的位置?

解决方案:查找首个Unicode字符(编码>0xFF)的位置

针对你的需求——找出tbName表Name字段中首个Unicode编码大于0xFF的字符位置,可以使用SQL Server的PATINDEX函数实现,无需复杂的自定义逻辑。

数据示例

你的表数据如下:

IdName
1\n汉字\n
2\n 张三\n

预期结果:第1行返回2,第2行返回3。

实现SQL语句

直接使用PATINDEX配合模式匹配,即可定位首个非ASCII(编码>0xFF)的字符:

SELECT 
    Id,
    PATINDEX('%[^ -ÿ]%', Name) AS FirstUnicodeCharPosition
FROM tbName

原理说明

  • [^ -ÿ]是正则匹配模式,代表不在ASCII空格(0x20)到扩展ASCII字符ÿ(0xFF)范围内的字符,也就是所有Unicode编码大于0xFF的字符。
  • PATINDEX函数会返回字符串中第一个匹配该模式的字符位置,完全符合你的需求。

特殊场景处理

如果Name字段可能为空或不存在Unicode字符,PATINDEX会返回0,可通过CASE语句调整返回值:

SELECT 
    Id,
    CASE 
        WHEN PATINDEX('%[^ -ÿ]%', Name) > 0 THEN PATINDEX('%[^ -ÿ]%', Name)
        ELSE NULL -- 可替换为0或其他默认值
    END AS FirstUnicodeCharPosition
FROM tbName

你之前尝试的CHARINDEX(CHAR(? >0xFF), Name)无法实现需求,因为CHAR函数仅能接收单个固定编码值,无法匹配范围;而PATINDEX的模式匹配天然支持范围筛选。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 11:24:27