在列中找不到值

时间:2019-03-08 10:20:08

标签: sql sql-server image

我正在寻找一列图像,我知道它在那里。但是,当我选择时,找不到。有人知道我在做什么错吗?

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语句中的值,我什么也没得到。

2 个答案:

答案 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)

上的二进制样式