选择varchar列中的项目范围(sql server)

时间:2013-10-11 19:47:34

标签: sql sql-server range varchar between

如何从sql server中的VARCHAR类型列中选择一系列项目?

我想做类似的事情:

SELECT TE.DESC 
FROM PRODUCT P, ETYPE TE WHERE ( P.IDTYPE = TE.IDTYPE )
AND P.NUMBER BETWEEN '619' AND '623'

'P.NUMBER'列可以包含数字和字母,如'abc123',然后sql无法正确选择我想要的内容。

有一些方法可以做到吗?

谢谢

2 个答案:

答案 0 :(得分:1)

您只能使用此双CASE

获取数字
SELECT TE.DESC 
FROM PRODUCT P, ETYPE TE WHERE ( P.IDTYPE = TE.IDTYPE )
WHERE 1 = CASE ISNUMERIC(P.NUMBER)
    WHEN 1 THEN
         CASE WHEN CAST(P.NUMBER AS INT) BETWEEN 619 AND 623 THEN 1 ELSE 0 END 
    ELSE 0
END

答案 1 :(得分:1)

首先,您需要创建一个函数,它将从NUMBER中删除所有非数字字符并返回一个float(或int),如下所示:

create function dbo.RemoveAlpha(@str varchar(1000))
returns float
AS
begin
    while patindex('%[^0-9]%', @str) > 0
    begin
        set @strText = stuff(@str, patindex('%[^0-9]%', @str), 1, '')
    end
    return convert(float, @str)
end

然后你可以这样重写你的查询:

SELECT TE.DESC 
FROM PRODUCT P, ETYPE TE 
WHERE ( P.IDTYPE = TE.IDTYPE )
AND dbo.RemoveAlpha(P.NUMBER) BETWEEN 619 AND 623