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

将char列改为nchar后,无法用[0-9]匹配获取MAX(docref)的问题

nchar列LIKE匹配返回NULL的原因及解决方法

问题原因

  • nchar是固定长度的Unicode字符类型,将char列转换为nchar后,所有数据都会被自动填充Unicode空格(U+0020)到列定义的长度。比如原char(20)转nchar(20)后,TST/TT/22/02/0004这类字符串末尾会补6个空格,而你的LIKE模式N'TST/TT/22/02/[0-9][0-9][0-9][0-9]'仅匹配到最后四位数字,未覆盖末尾的空格,导致没有符合条件的记录,最终返回NULL。
  • 并非[0-9]通配符不能在nchar列使用,而是末尾空格破坏了字符串与匹配模式的结构一致性。

解决方法

方法1:在LIKE模式中加入末尾匹配

通过%匹配任意长度的末尾空格(或其他字符),修改后的SQL语句:

SELECT MAX(docref) FROM docHeader WHERE docref LIKE N'TST/TT/22/02/[0-9][0-9][0-9][0-9]%'

方法2:去除字段末尾空格后匹配

使用RTRIM函数去掉nchar字段的末尾空格,再执行匹配:

SELECT MAX(docref) FROM docHeader WHERE RTRIM(docref) LIKE N'TST/TT/22/02/[0-9][0-9][0-9][0-9]'

注意:如果业务场景中允许字段末尾存在有效空格,此方法不适用。

方法3:改用nvarchar类型(推荐)

将nchar改为可变长度的nvarchar类型,不会自动填充空格,与原char列的行为更一致,后续查询无需额外处理:

ALTER TABLE docHeader ALTER COLUMN docref NVARCHAR(20) -- 替换为实际列长度

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 07:51:34