2010-12-23 312 views
1

我有一個字段表,表示該行中的數據是否有效。該字段包含一個不確定長度的字符串。我需要一個查詢,只會拉出行中所有字符都是N的行。這個字段的一些可能的例子。SQL字符串只包含

NNNNNNNNNNNNNNNNNNN 
NNNNNNNNNNNNNNNNNNNNNNN 
NNNNNEEEENNNNNNNNNNNN 
NNNNNOOOOOEEEENNNNNNNNNNNN 

請在明信片上提出任何建議。

非常感謝

回答

5

這應該做的伎倆:

SELECT Field 
FROM YourTable 
WHERE Field NOT LIKE '%[^N]%' AND Field <> '' 

它在做什麼是一個通配符搜索,細分:

的LIKE將找到記錄中,其中字段包含比其他字符N在現場。因此,我們將NOT應用於此,因爲我們只對不包含除N以外的字符的記錄感興趣。Plus是用於過濾空白值的條件。

+0

擊敗我吧! – Quassnoi 2010-12-23 12:23:24

+0

多數民衆贊成票...我想我只是有一個糟糕的一天,因爲我知道這一切:S – 2010-12-23 12:25:31

1
SELECT * 
FROM mytable 
WHERE field NOT LIKE '%[^N]%' 
1

我不知道您正在使用哪種SQL方言。例如,Oracle有幾個可能使用的功能。與Oracle,你可以使用像條件:

WHERE LTRIM(場,「N」)=「」

的想法是修剪出所有N的,看看結果是空字符串。如果您沒有LTRIM,請檢查您是否有某種TRANSLATE或REPLACE功能來執行相同的操作。

另一種方式來做到這一點可能是來挑選你的字段的長度,然後通過填充空字符串,以構建比較值N.也許是這樣的:

WHERE字段= RPAD(「」,場,「N)

Oracle用N填充空字符串,並從第二個參數的長度中挑選填充字符數。或許,這也工作:

WHERE字段= RPAD(「」,長度(場),「N)

我沒有測試過這些,但希望這會給你一些想法如何解決你的問題。我想如果你有很多行,並且你沒有其他的WHERE條件來選擇合適的索引,那麼這些解決方案中的很多都會有不好的表現。