我在 SQL Server 中有一个表,名为 tbl_spe
包含计算机的一些规范,如 CPU, RAM,...
我想选择具有此条件的所有行:其 RAM 小于 1GB 的所有行
我们可以简单地编写这个查询:
Select * from tbl_spe where RAM <= 1
或类似的东西,但问题在于表的数据:
ID RAM
159 2GB DDR2
160 256MB DDR
161 3GB DDR2
162 512MB DDR
如何提取 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'
这是 SQLFiddle 中的一个例子
如果您想要少于 2GB,请将 WHERE 子句更改为:
WHERE RAMFactor = 'MB'
OR (RAMFactor = 'GB' AND RAMValue < 2)
第一次检查将获取以“MB”为单位的所有记录,因此小于“GB”。
第二次检查将获取以“GB”为单位且值小于 2 的所有记录,因此“GB”值小于 2GB。
关于sql - 从此表中选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16294461/