sql - 从此表中选择

标签 sql tsql

我在 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/

相关文章:

mysql - MySql中基于时间戳的嵌套删除

php - 使用多个表上的多个查询从多个表中获取数据

c# - SQL 服务器 2005 : dynamically adding parameters to a stored procedure

sql查询查找订购过于频繁的客户?

sql-server - SQL Server 2014 - 合并 - 语法错误

SQL Server - 在Where和Select中使用Exists子句

sql - 常量上的 NULL 值替换

android - 在 SQLite Android 中使用 ContentValues 和 Raw SQL 插入数据有什么区别?

sql - 是否可以在 SQL Server 中的表上应用默认过滤器?

sql - MS SQL Server,多次插入