2016-03-31 10 views
1

mysqlに2つの引数を受け取る関数があるかどうかを知りたい場合は、最初の引数がnullの場合はnullを返し、それ以外の場合は戻り値を返します。null以外の値を変換するMysql関数

if(something is null, null, anotherthing)のショートカットになります。

+0

@GordonLinoff。 'coalesce'は最初のnull以外の値を返します。また、null以外の値がない場合はnullを返します。私はnull以外の値を変換したい、またはnullの場合はnullを返します。これはHaskellの 'Maybe'値の' fmap'動作と似ています – FtheBuilder

+2

いいえ、そのための関数はありませんが、おそらくあなた自身で書くことができます。 – dnoeth

+1

@dnoeth答えです。非常に単純です;) – FtheBuilder

答えて

1

残念ながらyorの振る舞いの機能はありませんが、あなたの権限を持っていれば独自の関数を作成するのは簡単ですが、既に表示されているようにIF THEN ELSEを追加することもできますあなたの質問に答えてください。関数を作成したいのであれば、明示的なパラメータ型が必要であるという問題がありますが、残念なことに関数のオーバーロード(同じ関数名ではありますが異なるパラメータ型)では機能しません。したがって、異なるタイプの異なる関数と、異なる関数名を必要とします。

CREATE FUNCTION `fmap_varchar`(e1 VARCHAR(255), e2 VARCHAR(255)) 
    RETURNS VARCHAR(255) DETERMINISTIC 
    RETURN IF(e1 IS NULL, NULL, e2); 

また、返品句でも指定できる正しい文字セットに注意する必要があります。

そして、あなたはすでに与えたクエリで解決策:私はいくつかの誤解があると思い

SELECT IF(something IS NULL, NULL, anotherthing) FROM your_table; 
+0

問題の中心を理解していただきありがとう – FtheBuilder

+0

申し訳ありませんが、私はクエリ内でそのようなステートメントが気に入らないので、より良い解決策を見つけることができませんでした。 MySQLは小規模なプロジェクトや標準の機能には向いていますが、そのような低い要件でカスタマイズすることは時々面倒です。しかし、すべてのDBMSには短所と長所があります。 – Pintus

関連する問題