0

SQLサーバーの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 は必要なものを正しく選択できません。

何か方法はありますか?

ありがとう

4

2 に答える 2

1

この double を使用して数値のみを取得できます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
于 2013-10-11T20:00:46.917 に答える
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
于 2013-10-11T20:23:38.550 に答える