我正在寻找一列图像,我知道它在那里。但是,当我选择时,找不到。有人知道我在做什么错吗?
SELECT
CONVERT(VARBINARY(MAX), Picture),
COUNT(*) AS Count -- convert(nvarchar,(MAX(employeeid)))
FROM
TABLENAME
GROUP BY
CONVERT(VARBINARY(MAX), Picture)
HAVING
COUNT(*) > 1
ORDER BY
Count
我得到一个结果和一个计数4.当我使用
查询表时Select CONVERT(VARBINARY(MAX), Picture),employeeid from TABLENAME where CONVERT(VARBINARY(MAX), Picture) = 'value from result 1'
和select语句中的值,我什么也没得到。
答案 0 :(得分:1)
如果我的理解正确,并且您想标识多次使用同一图像的行,则可以执行以下操作:
WITH CTE AS(
SELECT employeeid,
Picture,
COUNT(employeeid) OVER (PARTITION BY Picture) AS Entries
FROM YourTable)
SELECT *
FROM CTE
WHERE Entries > 1;
此外,我怀疑您的查询无效,因为您有:
CONVERT(VARBINARY(MAX), Picture) = 'value from result 1'
暗示是将前一个varbinary
的值放在文字字符串引号中。值0x01
和'0x01'
不相同(SELECT CASE WHEN 0x01 = '0x01' THEN 1 ELSE 0 END;
返回0
)。 '0x01'
是varbinary
的字符串表示形式,但是,如果将该值强制转换为varbinary
,则会得到0x30783031
({{1} }返回1)。
答案 1 :(得分:0)
您什么也没得到,因为您正在对BINARY数据执行STRING搜索。
where CONVERT(VARBINARY(MAX), Picture) = 'value from result 1'
左侧是Binary,右侧是字符串(CHAR)
您应该再次将VARBINARY转换为VARCHAR以执行字符串搜索:
Select CONVERT(VARBINARY(MAX), Picture),
employeeid
from TABLENAME
where CONVERT(varchar(max),CONVERT(VARBINARY(MAX), Picture),1) = 'value from result 1'
,1
是一种“样式”,它告诉SQL Server以二进制表示形式返回字符串,即在开头加上0x
,这就是您的“二进制字符串”应该是的方式由您的第一个查询返回。请参见CAST and CONVERT (Transact-SQL)