T-SQL使用substring格式化手机号报错:参数2数据类型varchar无效
T-SQL手机号分段格式化报错解决
报错场景
给手机号添加-分隔符实现123-456-789样式分段时,执行代码触发如下错误:
Argument data type varchar is invalid for argument 2 of substring function.
当前使用T-SQL环境开发,曾尝试替换为MID函数实现相同逻辑但执行失败,原有报错代码如下:
declare @tel nvarchar(20) = 123456789 set @tel = (select left (@tel, '3'))+'-'+(select substring (@tel, '4','3'))+'-'+(select right (@tel, '3')) select @tel
错误原因
- 核心问题是字符串函数参数类型错误:T-SQL中
LEFT、SUBSTRING、RIGHT的截取长度、起始位置参数必须为整数类型,原代码传入的'3'、'4'是带单引号的字符串值,无法被函数识别为合法的位置参数,直接触发类型无效报错。 - T-SQL原生不提供
MID函数,该函数是MySQL、Access等数据库的语法,替换后自然无法正常运行。 - 代码存在不规范写法:
@tel定义为字符串类型,初始赋值123456789未加单引号属于数值类型隐式转换;字符串拼接不需要嵌套多层SELECT子查询,属于冗余写法。
修复方案
修正参数类型、规范写法后的代码如下,执行后可直接得到预期的分段格式:
DECLARE @tel NVARCHAR(20) = '123456789' SET @tel = LEFT(@tel, 3) + '-' + SUBSTRING(@tel, 4, 3) + '-' + RIGHT(@tel, 3) SELECT @tel
执行返回结果为123-456-789,符合格式化要求。
内容的提问来源于stack exchange,提问作者Ratoshi Kaguya
相关产品推荐
相关产品推荐

