在sql中的权限不在where子句上

时间:2015-01-22 11:37:31

标签: sql database sql-server-2008-r2 where

当我有这个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子句时它没有显示?

2 个答案:

答案 0 :(得分:1)

WHERE MT.Media = 'Telephone' AND
LEN('0557500007')>8 and RIGHT(rtrim([MediaValue]),8) =RIGHT('0557500007',8)

答案 1 :(得分:0)

SQL-Server使用空白填充字符串,以便将其与另一个字符串进行比较。他们声称此行为符合标准(至少使用SQL-92):https://support.microsoft.com/kb/316626/en-us

  

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)