[英]right in sql is not working on the where clause
当我有这个where
子句时
WHERE MT.Media = 'Telephone' AND
LEN('0557500007')>8 and [MediaValue]='0557500007'
我在SQL Management Studio中排了一行
但是当我做出这个where
WHERE MT.Media = 'Telephone' AND
LEN('0557500007')>8 and RIGHT([MediaValue],8) =RIGHT('0557500007',8)
我得到空结果,为什么呢?
从第一个where
子句中,您可以看到我执行了该值0557500007
,但是为什么当我应用第二个where
子句时却没有显示呢?
WHERE MT.Media = 'Telephone' AND
LEN('0557500007')>8 and RIGHT(rtrim([MediaValue]),8) =RIGHT('0557500007',8)
SQL-Server用空白填充字符串,以便与另一个字符串进行比较。 他们声称此行为符合标准(至少与SQL-92兼容): https : //support.microsoft.com/kb/316626/zh-cn 。
SQL Server遵循有关如何将字符串与空格进行比较的ANSI / ISO SQL-92规范(第8.2节,通用规则#3)。 ANSI标准要求对比较中使用的字符串进行填充,以便它们的长度在比较之前匹配。 填充直接影响WHERE和HAVING子句谓词的语义以及其他Transact-SQL字符串比较。 例如,Transact-SQL认为字符串“ abc”和“ abc”在大多数比较操作中是等效的。
因此,与其他DBMS不同,SQL-Server将'0557500007'和'0557500007'视为相等。 因此,您的列值似乎带有尾随空格。 使用RTRIM删除这些:
right(rtrim(MediaValue]),8)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.