2015-10-05 69 views
0

我的程序中存在一個錯誤,它在我們的數據庫的字符串中複製撇號。這是字符串'RAYNAUD'S SYNDROME',在那裏有32K以上的撇號。編寫SELECT查詢以調用帶有許多撇號的字符串的最佳方法是什麼?我在網上看到的用於選擇帶撇號的字符串的所有演示只能處理單個撇號。SQL Server,如何查詢包含多個撇號的字符串?

+0

什麼是select語句的目的更普遍?你只是想找到有壞字符串的行? – hatchet

+0

@hatchet,確切地說,我試圖找出壞字符串,以便我可以用更新語句替換它們。 –

+0

最好是,我想要做的是: SELECT * FROM(表名)WHERE(列名),然後指定可能與通配符在一行中有幾個撇號的東西。我感覺並不是所有我想要調用的行都有相同數量的撇號,但它們都有一個異常大量的撇號。 –

回答

0

這將返回YourTable中包含至少一個撇號的YourTable中的所有行。將0替換爲需要檢查的撇號數。

select * 
from [YourTable] 
where LEN([YourColumn]) - LEN(REPLACE([YourColumn], '''', '')) > 0 
0

若要提取有許多撇號的記錄,你可以寫這樣的查詢:

create table test (somedata varchar(100)); 
insert into test values ('''hello'' ''again''') 

select * from test 
where len(somedata) - len(REPLACE(somedata, '''', '')) > 0 

要更新所有這些記錄,你可以做

update test 
set somedata = REPLACE(somedata, '''', '') 
where len(somedata) - len(REPLACE(somedata, '''', '')) > 0 
0

兩種方法:

這是如果你正在尋找你提到的字符串的錯誤版本

SELECT * FROM myTable WHERE myColumn LIKE 'RAYNAUD''S SYNDROME' AND LEN(myColumn) > 18 

,另一個是與超過2個單引號找到行(你可以改變它來尋找一些其他的閾值數)

SELECT * FROM myTable WHERE LEN(REPLACE(myColumn,'''','') < LEN(myColumn) - 2 
+0

謝謝斧頭。我能夠通過以下查詢獲得結果: SELECT * FROM PatDx WHERE說明LIKE'RAYNAUD%'和LEN(描述)> 18 (對不起,StackOverflow的新增功能,不確定如何格式化代碼, t同意我) 我打算嘗試一個類似的UPDATE語句與該WHERE子句。 –

+0

只要注意不要有任何副作用(即其他OK字符串碰巧有'RAYNAUD')。 – hatchet

相關問題