Замена SQL не работает для большего, чем>

Я пытаюсь подсчитать все значения в столбце Value, превышающие 5.

Тем не менее, некоторые результаты в этом столбце выглядят как '> 10' (в этом поле больше символа >).

Я хотел бы по-прежнему считать это> 5.

Для этого я сделал следующее:

(COUNT(CASE WHEN t.VALUE LIKE '*>*'
        and Replace(t.VALUE, '>', ' ') > 5)
Then 1
Else NULL
End
)

Но по какой-то причине не заменяет.

ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
1
0
598
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

А как насчет преобразования в число?

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 |
+-------+

Спасибо! Я полностью пропустил проблему с подстановочными знаками, так как я скопировал ее с кристалла. Однако в дополнение к '>' я также использую '%' как то, что я хотел бы заменить. Учитывая, что % используется как подстановочный знак в SQL, как я могу его заменить?

kazzi 19.03.2018 13:56

Рад помочь. Просто закройте "%" квадратными скобками. docs.microsoft.com/en-us/sql/t-sql/language-elements/…

Eric Brandt 19.03.2018 14:01

Спасибо за помощь. Последний пункт: когда я запускаю с изменениями выше, я получаю следующую ошибку: 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.

kazzi 19.03.2018 14:15

'THEN CAST (Replace (t.VALUE,'> ',' ') AS numeric (<Scale>, <Precision>))' Просто установите масштаб и точность для работы с вашими данными.

Eric Brandt 20.03.2018 17:26

Другие вопросы по теме