1

我有一个表,其名称列包含类似的值'arthur_01', 'arthur_02', 'arthur_03'...'arthur_10'和许多其他值。

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

4

2 回答 2

3

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

DELETE FROM table WHERE column LIKE 'arthur_0%';

该解决方案对“arthur_0 .....”之外的数据进行了一些假设。否则,您可能需要 RDBS 特定功能。

于 2013-10-03T23:29:14.113 回答
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]%';

这将有效地删除任何以or或column_name开头的 值的行。arthur_03arthur_04arthur_05

这是SQLFiddle演示

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

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

这是SQLFiddle演示

于 2013-10-03T23:34:28.933 回答