我只是不明白为什么这个查询不会拉结果

时间:2011-01-14 09:46:37

标签: sql sql-server sql-server-2008

好的,这是世界上最简单的查询,它在某种程度上失败了。

SELECT * FROM kal_auth.dbo.Login WHERE ID = 'Zen' AND PWD = CONVERT(varchar,'0x9248FEFE237DB009')

0x9248FEFE237DB009不是十六进制,虽然它看起来像。但它转换为“密码”

我知道这一行存在,而且只有密码字段没有返回结果,这是通过隔离和测试来学习的。

PWD字段是varchar(16)。

我不明白这一点。

2 个答案:

答案 0 :(得分:3)

我可能在这里遗漏了一些东西......

CONVERT(varchar,'0x9248FEFE237DB009')的结果与18个字符的'0x9248FEFE237DB009'相同,不是吗?那怎么可能等于16个字符的密码呢?

答案 1 :(得分:3)

使用

SELECT CONVERT(VARCHAR,0x9248FEFE237DB009) -- returns ’Hþþ#}° 

SELECT CONVERT(varchar,'0x9248FEFE237DB009') -- returns 0x9248FEFE237DB009

通过将其包含在引号中,它被视为字符串而不是二进制数据,这意味着转换为varchar不会执行任何操作!