值似乎没问题,但使用=与预期值比较返回false

时间:2018-04-19 13:46:26

标签: sql sql-server database

我有一个varchar列,设置为varchar(255),但我无法使用=运算符进行查询。

我知道这个集合中有数据字段(UOM) = 'PK',但是当我查询这个时,我得不到任何结果。如果我查询UOM LIKE '%PK%',我得到结果,但不使用直线相等运算符。我尝试将数据类型更改为nvarchar,并尝试查看列中是否有空格将其丢弃,但没有运气。

有没有人碰到这样的事情,你是怎么解决的?该列可能已损坏吗?

2 个答案:

答案 0 :(得分:0)

感谢所有回复!我找到了this有用的文章,其中显示了该字段中的一些隐藏的ASCII字符。快速更换声明,我们重新开始运作!再次感谢大家的快速回复。

答案 1 :(得分:-1)

最有可能是领先的空间...尝试ltrim(rtrim(UOM)) = 'PK'。大多数情况下,尾随空格不会影响相等操作,但您也可以在UPPER()之间进行操作。我不希望存在区分大小写问题,但在比较字符串时请记住这一点,这是可能想要使用LOWER()或{{1 }} 方法。

接下来,您将要开始查找回车,换行符,标签等。

declare @var varchar(64) =  char(10) + --LF
                            char(13) + --CR
                            'PK'
select 
    case when replace(replace(@var,char(10),''),char(13),'') = 'PK' then 1 else 0 end
    ,case when @var = 'PK' then 1 else 0 end

当然,如果是这种情况,您可以清理数据,或者继续向我们LIKE