SQL字符串仅包含

时间:2010-12-23 12:15:57

标签: sql sql-server

我有一个带有字段的表,表示该行中的数据是否有效。该字段包含一个未确定长度的字符串。我需要一个只会拉出此字段中所有字符都为N的行的查询。此字段的一些可能示例。

NNNNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNNNN
NNNNNEEEENNNNNNNNNNNN
NNNNNOOOOOEEEENNNNNNNNNNNN

请在明信片上提出任何建议。

非常感谢

3 个答案:

答案 0 :(得分:5)

这应该可以解决问题:

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

它正在做的是通配符搜索,细分:

LIKE将找到该字段包含字段中除N之外的字符的记录。因此,我们对NOT应用NOT,因为我们只对不包含N的字符的记录感兴趣。另外还有一个过滤掉空白值的条件。

答案 1 :(得分:1)

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

答案 2 :(得分:1)

我不知道您使用的是哪种SQL方言。例如,Oracle有几个您可以使用的功能。使用oracle,您可以使用以下条件:

在哪里LTRIM(字段,'N')=''

想法是修剪所有N并查看结果是否为空字符串。如果你没有LTRIM,请检查你是否有某种TRANSLATE或REPLACE函数来做同样的事情。

另一种方法可以是选择字段的长度,然后通过用N填充空字符串来构造比较器值。也许类似于:

WHERE field = RPAD('',field,'N)

Oracle使用N填充空字符串,并从第二个参数的长度中选择填充字符数。也许这也有效:

WHERE field = RPAD('',LENGTH(field),'N)

我没有测试过这些,但希望能给你一些如何解决问题的想法。我想如果你有很多行并且没有其他WHERE条件来选择正确的索引,那么这些解决方案中的许多都会有糟糕的性能。