SQL Server 2019中LIKE处理尾随空格的疑问:为何两边带空格返回1?
为什么以下SQL查询的输出结果是'1'?
先看这段SQL代码:
IF 'SQL ' LIKE 'SQL ' SELECT '1' ELSE SELECT '0'
它的输出是:
1
之前有个认知:在SQL Server中使用LIKE处理VARCHAR类型时,右侧模式的尾随空格是有效的,左侧匹配表达式的尾随空格会被忽略。按这个逻辑,左边的'SQL '应该被当成'SQL',和右边的'SQL '匹配时应该返回0,但实际结果却是1。
不过下面两种情况的结果符合预期:
IF 'SQL' LIKE 'SQL ' SELECT '1' ELSE SELECT '0' IF 'SQL ' LIKE 'SQL' SELECT '1' ELSE SELECT '0'
对应的输出:
0 1
核心原因
问题出在SQL Server对LIKE操作的长度匹配规则上:
- 当左右两边字符串的长度相等时,SQL Server会直接进行逐字符的精确匹配,不会忽略任何一边的尾随空格。
'SQL '和'SQL '长度都是4,逐字符完全一致,所以匹配成功,返回1。 - 当两边长度不等时,才会触发“忽略左侧尾随空格”的规则:
'SQL'(长度3)和'SQL '(长度4):模式的尾随空格有效,短字符串无法匹配长模式,返回0。'SQL '(长度4)和'SQL'(长度3):左侧尾随空格被忽略后等同于'SQL',和模式匹配,返回1。
内容的提问来源于stack exchange,提问作者abhishek
相关产品推荐
相关产品推荐

