2016-03-31 3 views
1

Ich möchte wissen, ob mysql eine Funktion hat, die zwei Argumente erhält, wenn das erste null ist, gibt es null zurück, andernfalls gibt es das zweite zurück.Mysql-Funktion, um Nicht-Null-Werte zu transformieren

Es wäre eine Abkürzung für if(something is null, null, anotherthing).

+0

@GordonLinoff Ich denke, es ein Missverständnis ist. 'coalesce' gibt den ersten Nicht-Null-Wert oder null zurück, wenn es keinen Nicht-Null-Wert gibt, richtig? Ich möchte einen Nicht-Null-Wert transformieren oder null zurückgeben, wenn es null ist. Es ist ähnlich dem 'fmap' Verhalten auf' Maybe' Werten in Haskell – FtheBuilder

+2

Nein, es gibt keine Funktion dafür, aber Sie können wahrscheinlich Ihre eigenen schreiben. – dnoeth

+1

@dnoeth Es ist die Antwort. Sehr einfach;) – FtheBuilder

Antwort

1

Leider gibt es keine Funktion für Ihr Verhalten, aber es ist einfach, Ihre eigene Funktion zu erstellen, wenn Sie die Berechtigungen dafür haben, sonst könnten Sie auch eine IF THEN ELSE zu Ihrer Abfrage hinzufügen, wie Sie bereits gezeigt haben, aber das wäre nein Beantworten Sie Ihre Frage. Wenn Sie eine Funktion erstellen wollen, dann haben Sie das Problem, dass Sie explizite Parametertypen benötigen und mit mysql ist es leider auch nicht funktional eine Funktion zu überlasten (gleicher Funktionsname aber unterschiedliche Parametertypen). Sie benötigen also für verschiedene Typen unterschiedliche Funktionen mit unterschiedlichen Funktionsnamen. Es würde so aussehen, dass:

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

Sie würden vielleicht auch haben für die richtige charset zu kümmern, die Sie auch bei der Rückkehr-Klausel angeben.

Und die Lösung mit einer Abfrage, die Sie bereits haben:

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

Vielen Dank für das Verständnis des Kerns des Problems – FtheBuilder

+0

Sorry, dass ich keine besseren Lösungen finden konnte, weil ich auch solche Aussagen in Abfragen nicht mag, aber ich wollte zumindest alle zusammen bündeln. MySQL ist ideal für kleine Projekte oder mit Standardfunktionen, aber das Anpassen mit solch niedrigen Anforderungen ist manchmal ärgerlich. Aber jedes DBMS hat Nachteile und Vorteile. – Pintus