+--------------------+---------------+------+-----+---------+-------+
| ID | GKEY |GOODS | PRI | COUNTRY | Extra |
+--------------------+---------------+------+-----+---------+-------+
| 1 | BOOK-1 | 1 | 10 | | |
| 2 | PHONE-1 | 2 | 12 | | |
| 3 | BOOK-2 | 1 | 13 | | |
| 4 | BOOK-3 | 1 | 10 | | |
| 5 | PHONE-2 | 2 | 10 | | |
| 6 | PHONE-3 | 2 | 20 | | |
| 7 | BOOK-10 | 2 | 20 | | |
| 8 | BOOK-11 | 2 | 20 | | |
| 9 | BOOK-20 | 2 | 20 | | |
| 10 | BOOK-21 | 2 | 20 | | |
| 11 | PHONE-30 | 2 | 20 | | |
+--------------------+---------------+------+-----+---------+-------+ 上面是我的桌子。我想得到GKEY > BOOK-2的所有记录,谁能告诉我mysql的表达式?
使用“WHERE GKEY>'BOOK-2‘”无法获得正确的结果。
发布于 2011-02-23 18:49:41
这样怎么样(类似于):
(这是MSSQL --我猜它在MySQL中也是类似的)
select
*
from
(
select
*,
index = convert(int,replace(GKEY,'BOOK-',''))
from table
where
GKEY like 'BOOK%'
) sub
where
sub.index > 2作为解释:内部查询基本上重新创建了您的表,但仅针对图书行,并且具有包含正确数据类型的索引的额外列,以进行大于数值的比较工作。
另一种方法是这样:
select
*
from table
where
(
case
when GKEY like 'BOOK%' then
case when convert(int,replace(GKEY,'BOOK-','')) > 2 then 1
else 0
end
else 0
end
) = 1本质上,问题是您需要在将索引转换为数字之前检查BOOK,因为GKEY的其他值将创建一个错误(不进行一些笨重的字符串处理)。
发布于 2011-02-23 18:47:56
SELECT * FROM `table` AS `t1` WHERE `t1`.`id` > (SELECT `id` FROM `table` AS `t2` WHERE `t2`.`GKEY`='BOOK-2' LIMIT 1)https://stackoverflow.com/questions/5089815
复制相似问题