如何从sql表中删除一组记录

时间:2013-10-03 23:25:18

标签: sql

我有一个名为column的表,其中包含'arthur_01', 'arthur_02', 'arthur_03'...'arthur_10'等值以及许多其他值。

有没有办法在一个查询中删除所有'arthur_0x'? 我知道BETWEEN运算符需要一个范围,但有没有办法让它在一半的字符串是数字的范围内?

2 个答案:

答案 0 :(得分:3)

您需要LIKE运算符:http://www.w3schools.com/sql/sql_like.asp

DELETE FROM table WHERE column LIKE 'arthur_0%';

这个解决方案对于什么数据超出'arthur_0 .....'做出了一些假设。否则,您可能需要RDBS特定功能。

答案 1 :(得分:3)

有不同的方法,不幸的是大多数方法都是供应商特定的。

一种方法是提取感兴趣的字符并与目标值进行比较

DELETE FROM table1
 WHERE SUBSTRING(column_name, 9, 1) = x;

或一系列值

DELETE FROM table1
 WHERE SUBSTRING(column_name, 9, 1) BETWEEN x AND y

这是 SQLFiddle 演示(MySQL)
这是 SQLFiddle 演示(SQL Server)

注意: 此方法的缺点是优化程序无法使用此列上可能包含的任何索引。


另一种方法是利用模式匹配,但它在不同的RDBMS中没有以相同的方式实现。

例如,在SQL Server中,您可以执行

DELETE FROM table1
 WHERE column_name LIKE 'arthur_0[345]%';

这将有效删除column_name中以值开头的值的所有行 arthur_03arthur_04arthur_05

这是 SQLFiddle 演示

MySQL中的相同内容可能看起来像

DELETE FROM table1
 WHERE column_name RLIKE '^arthur_0[345]';

这是 SQLFiddle 演示