我有一個名稱列包含值如'arthur_01', 'arthur_02', 'arthur_03'...'arthur_10'
和許多其他值的表格。如何從sql表中刪除一組記錄
有沒有辦法在一個查詢中刪除所有'arthur_0x'
? 我知道BETWEEN
運算符需要一個範圍,但是有沒有辦法讓它在一半的字符串是數字的範圍內?
我有一個名稱列包含值如'arthur_01', 'arthur_02', 'arthur_03'...'arthur_10'
和許多其他值的表格。如何從sql表中刪除一組記錄
有沒有辦法在一個查詢中刪除所有'arthur_0x'
? 我知道BETWEEN
運算符需要一個範圍,但是有沒有辦法讓它在一半的字符串是數字的範圍內?
您需要LIKE操作:http://www.w3schools.com/sql/sql_like.asp
DELETE FROM table WHERE column LIKE 'arthur_0%';
該解決方案使somse假設什麼數據是超越 'arthur_0 .....'。否則,您可能需要RDBS特定的功能。
有不同的方法,不幸的是他們大多數是供應商的具體情況。
的一種方法是,以提取所關注的字符,並比較目標值
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演示
什麼RDBMS(MySQL和SQL服務器,Oracle,... ) 你正在用嗎? – peterm