Sql 列为空,但不限定where子句
运行此查询时:Sql 列为空,但不限定where子句,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,运行此查询时: select LR.ID, LR.HIDE from Location_Room LR where LR.LID = 19624 我得到: 当我运行第二个查询时: select LR.HIDE, ID from Location_Room LR where LR.LID = 19624 AND (LR.HIDE = ' ' OR LR.HIDE IS NULL or LR.HIDE = '' or datalength(LR.HIDE) = 0)
select LR.ID, LR.HIDE
from Location_Room LR
where LR.LID = 19624
我得到:
当我运行第二个查询时:
select LR.HIDE, ID
from Location_Room LR
where LR.LID = 19624
AND (LR.HIDE = ' ' OR LR.HIDE IS NULL or LR.HIDE = '' or datalength(LR.HIDE) = 0)
我得到这个结果:
我需要检查HIDE是否为null或空白,但似乎不能这样做
列的设置如下所示:
为什么会这样?我如何解决它?看起来数据中有一个有趣的字符。您可以使用ASCII查看隐藏中第一个字符的ASCII值: 或许:
select ascii(left(ltrim(rtrim(hide)), 1))
from Location_Room;
尝试检查查询结果:选择distinct LR.HIDE from Location_Room LR,其中LR.LID=19624看起来列不是空的,请尝试选择HIDE的十六进制值以查看是否有任何不可打印的字符。值得注意的是,如果您开始交替使用NULL和“”,您会自找麻烦。使用空白字符是有理由的,但您的设计应始终使用其中一个字符,至少在不同的列中使用。@jannagy02-这将返回与第1列相同的空白值screenshot@Jens-我运行了这个SELECT CONVERTVARCHARMAX、CONVERTVARBINARYMAX、LR.HIDE、,1从LR.LID=19624的位置拉出十六进制值,我得到0x00这两个返回值0@iKode . . . \000确实是一个时髦的角色。你可以用替换隐藏,char0来摆脱它。
select ascii(left(ltrim(rtrim(hide)), 1))
from Location_Room;