我有以下查询
SELECT Ice.IceId, Ice.Code, Box.Ice, LEN(Box.Ice) AS IceCharLength,
DATALENGTH(Box.Ice) AS DataLength, Box.Ice, ASCII(Box.Ice) AS ASCII,
CAST(Box.ice AS VARBINARY) AS VarBinary
FROM dbo.tblESPShipBox Box
LEFT JOIN ReferenceManual.IceType Ice
ON Ice.Code = CASE
WHEN Box.ICE IS NULL THEN 'N'
WHEN RTRIM(Box.ICE) = '' THEN 'N'
WHEN Box.Ice IN ('', ' ', '/') THEN 'N'
ELSE Box.ICE
END
WHERE BOX_SEQ_NUM = '000023' AND BOX_TYPE_ID = 0
它返回以下结果:
IceId Code Ice IceCharLength DataLength Ice ASCII VarBinary
----------- ---- ---- ------------- ----------- ---- ----------- -------------
2 N 0 1 32 0x20
NULL NULL 1 1 0 0x00
奇怪的是,Box.ICE
第一行是 ' '(单个空格字符串)。第二行似乎是 '' (无空格字符串)。(我看到的方式是将单元格复制出来并粘贴到其他文本中,看看它是否有空格。)
该Box.ICE
列是一个char(1)
,所以我真的不明白 '' (无空格字符串)是如何进入其中的。
但奇怪的是,我的 case 语句仍应匹配 ''(无空格)字符。但显然不是。
我怎样才能弄清楚该字段中的真实内容并使其与我的案例陈述相匹配?
我尝试过的事情:
• 使用SSMSBoost 将包含特殊字符的单元格副本复制到NotePad++ 中(打开显示所有字符)。我这样做是为了确保没有无法播放的 unicode 字符。
运行此查询:
您会注意到 [SingleSpaceString] 的值为“32”,而 [NoSpaceString] 为 NULL。
我建议将 ASCII(Box.Ice) 添加到您的选择语句中,以确认真正的空格是值,而不是奇数字符。