tenho a seguinte consulta
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
Ele retorna os seguintes resultados:
IceId Code Ice IceCharLength DataLength Ice ASCII VarBinary
----------- ---- ---- ------------- ----------- ---- ----------- -------------
2 N 0 1 32 0x20
NULL NULL 1 1 0 0x00
O estranho é que Box.ICE
para a primeira linha fica '' (Single Space String). A segunda linha parece ser '' (sem string de espaço). (A maneira como vejo isso é copiando a célula e colando em outro texto para ver se ela cria um espaço ou não.)
A Box.ICE
coluna é um char(1)
então eu realmente não vejo como um '' (sem string de espaço) entrou lá.
Mas a parte estranha é que minha instrução de caso ainda deve corresponder a um caractere '' (sem espaço). Mas claramente não.
Como posso descobrir o que realmente está neste campo e fazer com que corresponda à minha declaração de caso?
Coisas que tentei:
• SSMSBoost usado para fazer uma cópia especial com caracteres incluídos da célula no NotePad++ (com mostrar todos os caracteres ativados). Fiz isso para garantir que não haja caracteres unicode não jogáveis.
Execute esta consulta:
Você notará que o valor para [SingleSpaceString] é '32', enquanto [NoSpaceString] é NULL.
Sugiro adicionar ASCII(Box.Ice) à sua instrução select para confirmar que um espaço verdadeiro é o valor, em comparação com um caractere ímpar.