我有一个带有字段的表,表示该行中的数据是否有效。该字段包含一个未确定长度的字符串。我需要一个只会拉出此字段中所有字符都为N的行的查询。此字段的一些可能示例。
NNNNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNNNN
NNNNNEEEENNNNNNNNNNNN
NNNNNOOOOOEEEENNNNNNNNNNNN
请在明信片上提出任何建议。
非常感谢
答案 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条件来选择正确的索引,那么这些解决方案中的许多都会有糟糕的性能。