我在SQL Server中有一个表,tbl_spe它包含一些计算机的规范,就像CPU, RAM,...
我想要选择具有这种条件的所有行:它们的RAM小于1GB的所有行我们可以简单地编写这个查询:
Select * from tbl_spe where RAM <= 1
Run Code Online (Sandbox Code Playgroud)
或类似的东西,但问题是关于表的数据:
ID RAM
159 2GB DDR2
160 256MB DDR
161 3GB DDR2
162 512MB DDR
Run Code Online (Sandbox Code Playgroud)
如何提取数字的RAM字段?并告诉查询选择他们的RAM小于1GB的所有行?
;WITH CTE AS
(
SELECT *,
CONVERT(varchar(100), LEFT(RAM, PATINDEX('%[a-z]%', RAM) - 1)) AS RAMValue,
RIGHT(CONVERT(varchar(100), LEFT(RAM, PATINDEX('%[ ]%', RAM) - 1)), 2) AS RAMFactor
FROM tbl
)
SELECT *
FROM CTE
WHERE RAMFactor = 'MB'
Run Code Online (Sandbox Code Playgroud)
这是SQLFiddle中的一个例子
如果您希望小于2GB,请将WHERE子句更改为:
WHERE RAMFactor = 'MB'
OR (RAMFactor = 'GB' AND RAMValue < 2)
Run Code Online (Sandbox Code Playgroud)
第一次检查将获得以"MB"为单位测量的所有记录,因此小于"GB".第二次检查将获得以"GB"测量并且值小于2的所有记录,因此"GB"值小于2GB.