我有一个名为column的表,其中包含'arthur_01', 'arthur_02', 'arthur_03'...'arthur_10'
等值以及许多其他值。
有没有办法在一个查询中删除所有'arthur_0x'
?
我知道BETWEEN
运算符需要一个范围,但有没有办法让它在一半的字符串是数字的范围内?
答案 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_03
或arthur_04
或arthur_05
。
这是 SQLFiddle 演示
MySQL中的相同内容可能看起来像
DELETE FROM table1
WHERE column_name RLIKE '^arthur_0[345]';
这是 SQLFiddle 演示