无法使用字符串不等于领域速写的查询

时间:2018-10-06 09:15:15

标签: swift realm

我正在将SQLite数据库更改为领域,但无法将SQLite查询转换为领域

我尝试使用!=NOT CONTAINS,但是没有用。如何做到这一点?

下面是我的旧SQLite查询,我正在尝试将其转换为领域DB

select COUNT(*) from (tabledata)
where  ifnull(length((KEY_DATA)), 0) <> 0 and
       lower((KEY_DATA)) <> lower('N/A') and
       lower((KEY_DATA)) <> lower('NA') and
       lower((KEY_DATA)) <> lower('not applicable')

我正在尝试

let countpredicate = NSPredicate(format: "data.length > 0 AND data != [c]'N/A' AND data != [c]'NA' AND data != [c]'not applicable'")

这有什么问题?

3 个答案:

答案 0 :(得分:0)

我认为您应该将[c]与操作数而不是字符串

结合使用
let countpredicate = NSPredicate(format: "data.length > 0 AND data !=[c] 'N/A' AND data !=[c] 'NA' AND data !=[c] 'not applicable'")

也许您可以使用IN

let countpredicate = NSPredicate(format: "data.length > 0 AND data NOT IN[c] ('N/A','NA','not applicable'")

答案 1 :(得分:0)

您的谓词没有正确构建:

替换

  

数据 不为空

     

data.length > 0data != ''

  

数据 不包含

     

data != [c]'<insert text>'!(data contains[c] '<insert text>')

最终:

NSPredicate(format: "data != %@ && !(data contains[c] %@) && !(data contains[c] %@) && !(data contains[c] %@)", "", "N/A", "NA", "not applicable")

答案 2 :(得分:0)

将代码更改为:

let countpredicate = NSPredicate(format: "data.length > 0 AND data !CONTAINS[c] 'N/A' AND data !CONTAINS[c] 'NA' AND data !CONTAINS[c] 'not applicable'")

[c]表示区分大小写