2012-01-16 76 views
0

在我的SQL Server數據庫中有像數據庫的情況有一個主鍵,主鍵是在格式,如「0000100001」和「C100001」指導MS SQL刪除查詢

我想刪除數據庫中的所有記錄以'0'開始,但不是以'C'開頭的記錄。

我試過內置功能SUBSTRING('primary_key',1,1)='0'但它並沒有幫助我。 謝謝。

+1

你能告訴我們你的表模式? 'SUBSTRING('primary_key',1,1)'將把子串函數應用到字符串「primary_key」而不是預期的列。 – tobias86 2012-01-16 11:59:18

+0

這些是非常差的主鍵設計,這表明了問題。通過將多個部分的信息合併到一個列中,您需要執行所有這些無用的字符串操作技巧來刪除您想要的內容。如果你把它分成多列,你可以很容易地說'WHERE FlagValue ='X'',並且在你的路上。同樣,所有的前導零都會浪費存儲空間(字符串與整數)並導致許多LIKE字符串搜索,因爲用戶不喜歡輸入前導零。 – 2012-01-16 14:01:26

回答

0
SUBSTRING('primary_key',1,1)='0' 

測試是否字符串字面"primary_key"開始與字符0(它不那麼將返回零行),擺脫引用列的單引號。 (注意:如果您的列實際上並不是primary_key,那麼您需要參考它的實際名稱!)

或者您也可以使用WHERE primary_key LIKE '0%',它可以使用索引來定位行,因此效率更高。

-1

我不知道MS SQL,但在MySQL它會是這樣的:

"DELETE * FROM your_table WHERE primary_key LIKE '0%' AND primary_key NOT LIKE 'C%'" 

可以使用LIKE操作基本上搜索字符串或正則表達式的occurances。它可以採用通配符,例如%符號,無論您在尋找的模式的前面還是後面,或者兩者都在前面和後面。

例如:

LIKE 'C%'將匹配任何與C

LIKE '%C'開始將匹配任何東西C

LIKE '[A-Z]%'結束會匹配任何開頭大寫字母

LIKE '%LOL%'將匹配任何東西有字LOL(在c aps)。

進一步閱讀在 http://msdn.microsoft.com/en-us/library/ms179859.aspx

+0

這會失敗,因爲1.您的答案是針對MySQL的。 2.它將刪除鍵1,2,3和3,A,B等 – gbn 2012-01-16 12:03:11

+0

編輯完成後:默認情況下,SQL Server不區分大小寫...... – gbn 2012-01-16 12:08:55

+0

它非常相似,但仍然有幫助。無論哪種方式,我編輯我的答案來指定。另外,他說他想保留任何以「C」開頭的東西。我給他提供了其他場景的例子 – Martin 2012-01-16 12:10:06