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

如何限制SQL varchar字符串仅允许12位数字加1个'-'符号?

解决方案

要实现你需要的格式限制,核心是确保输入字符串必须包含且仅包含一个'-',其余为12位数字,同时禁止纯数字输入。修改后的代码逻辑如下:

declare @personNr varchar(13)  
declare @dashCount int
declare @pureDigits varchar(12)

set @personNr = '990511-834678' -- 测试用例:符合格式的13位字符串

-- 计算字符串中'-'的数量
set @dashCount = LEN(@personNr) - LEN(REPLACE(@personNr, '-', ''))
-- 提取去掉'-'后的纯数字部分
set @pureDigits = REPLACE(@personNr, '-', '')

-- 验证条件:
-- 1. 恰好有1个'-'
-- 2. 去掉'-'后全为数字
-- 3. 纯数字部分长度为12(即总长度13)
-- 4. 不含非法的'+'字符
if @dashCount = 1 
   and @pureDigits NOT LIKE '%[^0-9]%'
   and LEN(@pureDigits) = 12
   and CHARINDEX('+', @personNr) = 0
    print '1' -- 格式通过
else
    print '0' -- 格式不通过

修改说明:

  • 移除了原代码中允许纯数字通过的@personNr NOT LIKE '%[^0-9]%'条件,这是导致13位纯数字被误判的关键原因
  • 通过LEN(@personNr) - LEN(REPLACE(@personNr, '-', ''))精确统计'-'的数量,确保仅存在一个分隔符
  • 验证去掉'-'后的字符串长度为12,保证总长度为13(12位数字+1个'-')
  • 保留了对'+'的检查,确保输入不含非法字符

测试场景验证:

  • 输入'990511-834678'(12位数字+1个'-')→ 输出1
  • 输入'9905118346789'(13位纯数字)→ 输出0
  • 输入'990511--8346'(多个'-')→ 输出0
  • 输入'990511a834678'(含非数字字符)→ 输出0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 15:05:31