MS SQL Conversion failed when converting the nvarchar value '??????' to data type int
Выполняю следующий простой запрос:
WITH tt1 AS(
SELECT CASE WHEN try_cast(QuestionDetailValue as int) IS NULL THEN N'Bad' ELSE N'Ok' END AS TryCast
FROM vw.Rates)
SELECT TryCast
FROM tt1
--WHERE TryCast = N'Bad'
Результатом выполнения данного запроса является только ответ 'Ok', что говорит о том, что в столбце QuestionDetailValue содержатся только числовые значения. Также, я пробовал достать DISTINCT QuestionDetailValue. Результатом являются числа от 0 до 10. И это правильно.
Но как только я раскомментирую фильтр WHERE и попробую отфильтровать, скажем, значения >= 9, выскакивает ошибка:
"Сообщение 245, уровень 16, состояние 1, строка 225 Conversion failed when converting the nvarchar value '??????' to data type int."
И что бы я ни делал, я не могу её пропустить. Я пробовал TRY_CAST, TRY_CONVERT, CASE WHEN, CAST, CONVERT и прочее. Но я не могу никаким известным мне способом эту ошибку обойти.
И что самое главное - я не могу поймать строчку с этой ошибкой. Её просто нет. Фильтр по этим символам выдаёт просто эту же ошибку, и всё. Соответственно, по этой же причине я не могу скинуть сюда примерный CREATE TABLE, потому что я не могу поймать эти символы.
Подскажите, что можно сделать?
Ответы (2 шт):
Попробуйте следующее решение.
SQL
-- DDL and sample data population, start
DECLARE @Rates TABLE (ID INT IDENTITY PRIMARY KEY, QuestionDetailValue NVARCHAR(255));
INSERT INTO @Rates VALUES
(N'10'),
(N'??????');
-- DDL and sample data population, end
SELECT *
FROM @Rates
CROSS APPLY (VALUES (IIF(TRY_CAST(QuestionDetailValue AS INT) IS NULL, N'Bad', N'Ok'))) AS t(c)
--WHERE c = N'Bad';
Результат
+----+---------------------+-----+
| ID | QuestionDetailValue | c |
+----+---------------------+-----+
| 1 | 10 | Ok |
| 2 | ?????? | Bad |
+----+---------------------+-----+
После раскомментирования предложения WHERE
+----+---------------------+-----+
| ID | QuestionDetailValue | c |
+----+---------------------+-----+
| 2 | ?????? | Bad |
+----+---------------------+-----+
SELECT COUNT(QuestionDetailvalue) from tt1 where QuestionDetailValue >= 9"Сообщение 245, уровень 16, состояние 1, строка 225 Conversion failed when converting the nvarchar value '??????' to data type int."
Вероятнее всего вам нужно использовать запрос с таким условием:
where try_cast(QuestionDetailValue as int) >= 9