请注意,这个问题仅涉及流行的SQLite.swift
库,stephencelis / SQLite.swift
使用SQLite.swift,你可以
let a = Expression<String>("a")
let b = Expression<String>("b")
等等。但你怎么样?
select a.x, a.y, ifnull(b.q, 'default text'), a.z
from a
left join b on blah
如何为内联sql ifnull子句创建表达式?
(doco提到Expression有一个init(literal :)初始化程序 - 也许它是相关的 - 但它没有文档记录,并且有不寻常的绑定参数。)
请注意,我完全知道您可以将值设为可选
let q = Expression<String?>("q")
然后再输入默认值;
我问如何将“ifnull(b.q,'default text')”表达为表达式(或者,学习它是不可能的),以便在SQL表达式中实际使用该值。
再一次,这个问题只与图书馆/stephencelis/SQLite.swift
有关答案 0 :(得分:1)
我不喜欢回答我自己的问题,
但老实说,现实的答案是:
现在你必须像其他人一样使用GRDB,github.com / groue / GRDB.swift
旧的SQL包装程序库(如同当时一样华丽,令人敬畏,令人难以置信)诚实地只是
截至2017年底,GRDB是唯一真正的可能性。
答案 1 :(得分:1)
也许这太晚了,但无论如何。我检查了源代码,有功能
public func ??<V : Value>(optional: Expression<V?>, defaultValue: V) -> Expression<V> {
return "ifnull".wrap([optional, defaultValue])
}
所以你必须使值可选
row.get(Expression<Double?>("q")) ?? 0 //this will be equals ifnull(q, 0)