Не могу найти значение в столбце - PullRequest
0 голосов
/ 08 марта 2019

Я ищу изображение в столбце, я знаю, что оно есть.Но когда я выбираю, я не могу найти его.Кто-то знает, что я делаю неправильно?

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'

и значение в операторе выбора,Я ничего не получаю.

Ответы [ 2 ]

1 голос
/ 08 марта 2019

Если я правильно понимаю, и вы хотите определить строки, в которых одно и то же изображение используется более одного раза, вы можете сделать:

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 (SELECT CASE WHEN 0x30783031 = '0x01' THEN 1 ELSE 0 END; возвращает 1).

0 голосов
/ 08 марта 2019

Вы ничего не получаете, потому что вы выполняете поиск 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 возвращать строку в двоичной нотации, то есть с добавлением 0x в начале, то есть, как ваши «двоичные строки» должны быть возвращены вашим первым запрос. См. Двоичные стили для CAST и CONVERT (Transact-SQL)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...