繁体   English   中英

正确的SQL不适用于where子句

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM