1
請注意,這個問題僅涉及流行SQLite.swift
庫,stephencelis/SQLite.swift「not null」形式的SQLite.Swift Expression()初始化?
隨着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提到,表達了一個init(字面:)初始化 - 也許這是有關 - 但它是無證,具有不同尋常的結合參數)
請注意,我完全知道,你可以做的。值可選
let q = Expression<String?>("q")
然後只是在默認後放入;
我在問如何表達「ifnull(b.q,'默認文本')」作爲表達式(或者,學習它是不可能的),以便在SQL表達式中實際使用值。
再次,這個問題僅涉及/stephencelis/SQLite.swift
那麼,在[SQLite.swift文檔](https://github.com/stephencelis/SQLite.swift/blob/master/Documentation/Index.md#sqliteswift-documentation)中簡單搜索「ifnull」一些東西。 –
嘿@GwendalRoué - 謝謝,但的確,doco頁面上的那一行根本沒有解釋如何或者是否可以使用複雜的行內選擇表達式。 (例如,**選擇ifnull(b.q,'默認文本'),等等,等等......)不幸的是我找不到任何地方 - 也許它只是沒有處理。 – Fattie
所以我想你必須使用原始SQL。在另一個項目中,您可能會嘗試使用GRDB.swift,作爲SQLite.swift的替代品。 GRDB查詢構建器也具有「漏洞」,並且不能生成所有SQL查詢。但至少當你不得不回退到原始SQL時,你不會「受到懲罰」:行消耗是相同的。 –