Я пытаюсь подсчитать все значения в столбце Value, превышающие 5.
Тем не менее, некоторые результаты в этом столбце выглядят как '> 10' (в этом поле больше символа >).
Я хотел бы по-прежнему считать это> 5.
Для этого я сделал следующее:
(COUNT(CASE WHEN t.VALUE LIKE '*>*'
and Replace(t.VALUE, '>', ' ') > 5)
Then 1
Else NULL
End
)
Но по какой-то причине не заменяет.


А как насчет преобразования в число?
select sum(case when try_convert(int, replace(t.value, '>', '')) > 5
then 1 else 0
end) as values_over_5
Ваша модель данных подозрительна, потому что вы выполняете числовые сравнения в столбце, который содержит числа.
Пару вещей.
Звездочка не является допустимым подстановочным знаком в SQL Server, поэтому мы изменим это.
Кроме того, если вы хотите, чтобы строка превратилась в число, вам нужно заменить больше чем пустой строкой, а не пробелом. Это не влияет на результат, но это правильно.
Это не так элегантно, как однострочник Гордона, но дало ожидаемые результаты.
DECLARE @t TABLE (VALUE VARCHAR(5));
INSERT @t (VALUE)
VALUES ('1'),('10'),('>10');
SELECT COUNT(*) AS Over5
FROM
(
SELECT
CASE WHEN t.VALUE LIKE '%>%' THEN Replace(t.VALUE, '>', '')
ELSE t.VALUE
END AS NewVal
FROM @t as t
) AS d
WHERE NewVal > 5;
+-------+
| Over5 |
+-------+
| 2 |
+-------+
Рад помочь. Просто закройте "%" квадратными скобками. docs.microsoft.com/en-us/sql/t-sql/language-elements/…
Спасибо за помощь. Последний пункт: когда я запускаю с изменениями выше, я получаю следующую ошибку: Conversion failed when converting the varchar value '14.0' to data type int. Warning: Null value is eliminated by an aggregate or other SET operation.
'THEN CAST (Replace (t.VALUE,'> ',' ') AS numeric (<Scale>, <Precision>))' Просто установите масштаб и точность для работы с вашими данными.
Спасибо! Я полностью пропустил проблему с подстановочными знаками, так как я скопировал ее с кристалла. Однако в дополнение к '>' я также использую '%' как то, что я хотел бы заменить. Учитывая, что
%используется как подстановочный знак в SQL, как я могу его заменить?