请注意,这个问题仅与流行的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 子句创建表达式?
(文档提到 Expression 有一个 init(literal:) 初始化器 - 也许它是相关的 - 但它没有文档记录并且具有不寻常的绑定(bind)参数。)
请注意,我完全知道您可以将该值设置为可选
let q = Expression<String?>("q")
然后稍后输入默认值即可;
我问如何将“ifnull(b.q, 'default text')”表达为表达式(或者,知道这是不可能的),以便该值实际上将在 SQL 表达式中使用。
再一次,这个问题仅与库/stephencelis/SQLite.swift 相关
最佳答案
也许这已经太晚了,但无论如何。我查了源码,有函数
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)
关于SQLite.Swift Expression() 初始化 "not null"表单?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43657549/