我有一个varchar
列,设置为varchar(255)
,但我无法使用=
运算符进行查询。
我知道这个集合中有数据字段(UOM) = 'PK'
,但是当我查询这个时,我得不到任何结果。如果我查询UOM LIKE '%PK%'
,我得到结果,但不使用直线相等运算符。我尝试将数据类型更改为nvarchar
,并尝试查看列中是否有空格将其丢弃,但没有运气。
有没有人碰到这样的事情,你是怎么解决的?该列可能已损坏吗?
答案 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