2013-10-03 38 views
1

我有一個名稱列包含值如'arthur_01', 'arthur_02', 'arthur_03'...'arthur_10'和許多其他值的表格。如何從sql表中刪除一組記錄

有沒有辦法在一個查詢中刪除所有'arthur_0x'? 我知道BETWEEN運算符需要一個範圍,但是有沒有辦法讓它在一半的字符串是數字的範圍內?

+0

什麼RDBMS(MySQL和SQL服務器,Oracle,... ) 你正在用嗎? – peterm

回答

3

您需要LIKE操作:http://www.w3schools.com/sql/sql_like.asp

DELETE FROM table WHERE column LIKE 'arthur_0%'; 

該解決方案使somse假設什麼數據是超越 'arthur_0 .....'。否則,您可能需要RDBS特定的功能。

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_namearthur_03arthur_04arthur_05開始值能夠有效地刪除任何行。

這裏是SQLFiddle演示

在MySQL同樣的事情可能看起來像

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

這裏是SQLFiddle演示