SQL Server是否仍无截取指定位置至末尾的内置substring函数?
SQL Server 2023中SUBSTRING函数是否支持省略长度参数?
- 截至2023年,SQL Server的内置
SUBSTRING函数仍然不支持省略长度参数,必须同时传入起始位置和长度两个参数才能调用。 - 针对“从指定位置取到字符串末尾”的需求,推荐几种更可靠的替代方案:
- 使用
STUFF函数:STUFF(s, 1, 2, ''),该写法直接移除字符串前2个字符,等价于从第3位取到末尾,可读性远优于手动计算长度。 - 若必须使用
SUBSTRING,需根据字符串类型精准计算长度:- 非Unicode类型(
char/varchar):SUBSTRING(s, 3, DATALENGTH(s) - 2),DATALENGTH返回实际字节数,不会忽略尾随空格。 - Unicode类型(
nchar/nvarchar):SUBSTRING(s, 3, (DATALENGTH(s)/2) - 2),因Unicode字符占2字节,需除以2得到实际字符数。 - 注意:
LEN()函数会自动截断尾随空格,仅当业务逻辑允许忽略尾随空格时,才可使用SUBSTRING(s, 3, LEN(s)-2),不符合需求时切勿使用。
- 非Unicode类型(
- 使用
- 社区长期存在对“SUBSTRING支持省略长度参数”的需求,但截至2023年微软尚未在SQL Server中添加该功能。
内容的提问来源于stack exchange,提问作者Seva Alekseyev
相关产品推荐
相关产品推荐

