我想编写一个查询来查看某个类别字段是否在某个范围内。问题是该字段可以包含以“#”字符为前缀的空值,文本或数字文本。
是否有人知道SQL将剥离非数字并允许我进行以下检查。
类别> 1和类别< 100
以下是字段类别可包含的内容示例:
#230.1 #200 Null text
我正在使用SQL Server 2000
答案 0 :(得分:2)
我看起来旁观者的解决方案是有效的。你应该考虑几点:
答案 1 :(得分:0)
尝试这样的事情
DECLARE @Table TABLE(
Val VARCHAR(200)
)
INSERT INTO @Table (Val) SELECT '#230.1'
INSERT INTO @Table (Val) SELECT '#200'
INSERT INTO @Table (Val) SELECT '210'
INSERT INTO @Table (Val) SELECT NULL
INSERT INTO @Table (Val) SELECT 'text'
SELECT *
FROM (
SELECT CASE
WHEN ISNUMERIC(Val) = 1
THEN CAST(Val AS FLOAT)
WHEN LEN(Val) > 1 AND ISNUMERIC(RIGHT(Val,LEN(Val)-1)) = 1
THEN CAST(RIGHT(Val,LEN(Val)-1) AS FLOAT)
END Num
FROM @Table
WHERE Val IS NOT NULL
AND (
ISNUMERIC(Val) = 1
OR (
LEN(Val) > 1
AND ISNUMERIC(RIGHT(Val,LEN(Val)-1)) = 1
)
)
) Numbers
WHERE Num BETWEEN 205 AND 230