SQL字符串首尾比较异常排查:N/A N/A未返回预期fail结果
问题原因&修复方案
核心问题点
- 语法错误:原SQL里多处多打了
=号(比如CHARINDEX(' ',=name)、c=name),这会让数据库无法正确解析字段,甚至直接报错。 - RIGHT函数逻辑错误:这是导致"N/A N/A"返回
pass的关键。RIGHT函数的第二个参数是要截取的字符长度,而不是起始位置。原语句里用CHARINDEX(' ', name)+1当长度,对于"N/A N/A"(TRIM后长度7,空格在第4位),会截取右边5个字符得到/ N/A,和左边截取的N/A肯定不相等,所以返回了pass。
修正后的SQL
SELECT TOP 1000 name, CASE WHEN CHARINDEX(' ', TRIM(name)) <> 0 AND LEFT(TRIM(name), CHARINDEX(' ', TRIM(name)) - 1) = RIGHT(TRIM(name), LEN(TRIM(name)) - CHARINDEX(' ', TRIM(name))) THEN 'fail' ELSE 'pass' END AS indicator FROM [Table]
逻辑说明
- 先对
name做TRIM处理,避免前后空格干扰位置计算; - 用
CHARINDEX确认姓名包含空格(是名+姓的结构); - LEFT截取空格前的「名」,RIGHT用
总长度 - 空格位置计算出「姓」的长度,完整截取空格后的「姓」; - 对比两者,相等就返回
fail,否则返回pass。
内容的提问来源于stack exchange,提问作者KAREN LORENA MARTINEZ MENDOZA
相关产品推荐
相关产品推荐

