2011-11-03 27 views
4

在Sybase和MSSqlServer TransactSQL中,當列值爲空時,我們有一個函數IsNull(columnName,valueForNull)來返回一個類型化的默認值。我如何在SQLite中複製這個功能?SQLite中的空替換:

實施例TRANSACTSQL:

select IsNull(MyColumn,-1) as MyColumn from MyTable 

如果MyColumn爲空時,該表達式將返回-1作爲MyColumn的值。想在SQLite中做類似的事情。

(是的,我知道我可以寫我自己的包裝函數來處理這一點 - 這不是我要找的答案)

TIA

回答

6

您可以使用ifnull

select ifnull(MyColumn,-1) as MyColumn from MyTable 
+1

ifnull(MyColumn,-1)* exactly *回答我的問題。不過,@Larry Lustig給了我們一個完全通用的SQL解決方案,根本沒有特殊的功能。 – Vector

2

SQLite的內置函數將會做我認爲你在這裏嘗試的東西。

6

你應該使用標準COALESCE function

select coalesce(MyColumn, -1) as MyColumn from MyTable 

,理解標準的ANSI SQL支持COALESCE因此使用它是一個很好的習慣進入任何數據庫。

+1

@Mikey:使用標準的SQL函數是一種破解?朦朧?我認爲你錯了。 COALESCE是爲了返回一組*值*中的第一個非NULL值,該函數不知道(也不應該)列是什麼,因爲它在* values *而不是* columns *上運行。以上是COALESCE的預期和習慣用法,甚至與[PostgreSQL手冊](http://www.postgresql.org/docs/9.0/interactive/functions-conditional.html#AEN15548)中的示例相匹配。使用非標準函數是一種破解,使用標準的SQL函數,因爲它打算用於不是破解。 –

+0

+1 - 我收回了我的評論 - 意識到在回家的路上同樣的事情 - 不是標準的 - 你可以使用標準語言功能 - 但是因爲它檢查了一組值,而硬編碼值只是另一個值可以是一個集合成員。 – Vector

3

SQL標準的方式來做到這一點是CASE:

SELECT CASE WHEN MyColumn IS NULL THEN -1 ELSE MyColumn END FROM MyTable 

大大高於發動機專用IFNULL更詳細,ISNULL,NZ功能,而且更加便於攜帶。 (或者,正如mu指出的那樣,你可以使用更好的COALESCE來實現這一點)。

+0

感謝您提供此信息。 – Vector