SQL替换不适用于大于>

时间:2018-03-16 19:20:57

标签: sql sql-server

我试图计算列Value中超过5的所有值。

然而,该列中的某些结果显示为'> 10' (它在字段中具有大于符号>

我仍然认为那是> 5.

为此,我做了以下事情:

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

但是,无论出于何种原因,它都没有取代。

2 个答案:

答案 0 :(得分:2)

那么,如何转换为数字?

select sum(case when try_convert(int, replace(t.value, '>', '')) > 5
                then 1 else 0
           end) as values_over_5

您的数据模型是可疑的,因为您正在对包含数字的列进行数字比较。

答案 1 :(得分:1)

有几件事。

星号不是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 |
+-------+