在我的SQL Server數據庫中有像數據庫的情況有一個主鍵,主鍵是在格式,如「0000100001」和「C100001」指導MS SQL刪除查詢
我想刪除數據庫中的所有記錄以'0'開始,但不是以'C'開頭的記錄。
我試過內置功能SUBSTRING('primary_key',1,1)='0'
但它並沒有幫助我。 謝謝。
在我的SQL Server數據庫中有像數據庫的情況有一個主鍵,主鍵是在格式,如「0000100001」和「C100001」指導MS SQL刪除查詢
我想刪除數據庫中的所有記錄以'0'開始,但不是以'C'開頭的記錄。
我試過內置功能SUBSTRING('primary_key',1,1)='0'
但它並沒有幫助我。 謝謝。
SUBSTRING('primary_key',1,1)='0'
測試是否字符串字面"primary_key"
開始與字符0
(它不那麼將返回零行),擺脫引用列的單引號。 (注意:如果您的列實際上並不是primary_key
,那麼您需要參考它的實際名稱!)
或者您也可以使用WHERE primary_key LIKE '0%'
,它可以使用索引來定位行,因此效率更高。
我不知道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
你能告訴我們你的表模式? 'SUBSTRING('primary_key',1,1)'將把子串函數應用到字符串「primary_key」而不是預期的列。 – tobias86 2012-01-16 11:59:18
這些是非常差的主鍵設計,這表明了問題。通過將多個部分的信息合併到一個列中,您需要執行所有這些無用的字符串操作技巧來刪除您想要的內容。如果你把它分成多列,你可以很容易地說'WHERE FlagValue ='X'',並且在你的路上。同樣,所有的前導零都會浪費存儲空間(字符串與整數)並導致許多LIKE字符串搜索,因爲用戶不喜歡輸入前導零。 – 2012-01-16 14:01:26