从此表中选择

Sir*_*ifi 5 sql t-sql

我在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的所有行?

XN1*_*N16 5

;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.

  • OP要求获取RAM小于或等于1 GB的数据.....但是您的查询会检索小于1 GB的记录,即256 MB (2认同)