如何从 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 无法正确选择我想要的。
有什么办法吗?
谢谢
如何从 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 无法正确选择我想要的。
有什么办法吗?
谢谢
首先,您需要创建一个函数,该函数将从您的 NUMBER 中删除所有非数字字符并返回一个浮点数(或整数),如下所示:
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
您只能使用这个 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