Microsoft SQL Server字符串修剪及通过代码查询记录ID技术问题
关于SQL Server字符串修剪与查询问题的解决办法
嘿,我来帮你搞定这两个SQL Server的字符串处理问题!
1. 如何在Microsoft SQL Server中修剪字符串中的字符?
SQL Server提供了几个实用函数,按需选择使用:
LTRIM():仅移除字符串开头的所有空格RTRIM():仅移除字符串结尾的所有空格TRIM():默认移除字符串首尾的空格;还能指定要移除的自定义字符,比如TRIM('!@#' FROM column_name)会把字段首尾的!、@、#全部清除- 如果要处理换行、回车、制表符这类特殊空白字符,就得结合
REPLACE()和字符的ASCII码——换行是CHAR(10),回车是CHAR(13),制表符是CHAR(9)
2. 解决查询带换行/冗余空格的Code字段匹配问题
你之前的查询没生效,核心问题有两个:
- 你用了
REPLACE(Code,'/n/r',''),但SQL Server不识别/n/r这种转义符,实际的回车换行是CHAR(13)(回车)+CHAR(10)(换行),所以这个替换根本没触达目标字符 - 默认的
TRIM()只处理普通空格,不会移除换行、回车这类特殊空白字符,所以即使字段里藏着换行,TRIM(Code)也不会把它清掉
给你两个可行的解决方案:
方案一:先替换特殊空白,再修剪剩余空格
把换行、回车、制表符全部替换为空,再用TRIM()处理首尾残留的空格:
SELECT * FROM Firms WHERE TRIM( REPLACE( REPLACE( REPLACE(Code, CHAR(13), ''), CHAR(10), '' ), CHAR(9), '' ) ) = '302489977'
这里CHAR(13)对应回车、CHAR(10)对应换行、CHAR(9)对应制表符,先清掉这些特殊字符,再修剪空格,就能精准匹配目标值了。
方案二:用TRIM扩展语法一次性移除所有空白字符
SQL Server支持在TRIM()里指定要移除的字符集合,直接把所有可能的空白字符加进去,写法更简洁:
SELECT * FROM Firms WHERE TRIM(CHAR(9) + CHAR(10) + CHAR(13) + ' ' FROM Code) = '302489977'
这个语句会一次性移除字段首尾的制表符、换行、回车和空格,效果和方案一完全一致。
内容的提问来源于stack exchange,提问作者user3514052
相关产品推荐
相关产品推荐

