Mam następujące dane w mojej tabeli „urządzenia”
affiliate_name affiliate_location model ip os_type os_version
cs1 inter Dell 10.125.103.25 Linux Fedora
cs2 inter Dell 10.125.103.26 Linux Fedora
cs3 inter Dell 10.125.103.27 NULL NULL
cs4 inter Dell 10.125.103.28 NULL NULL
Wykonałem poniższe zapytanie
SELECT CONCAT(`affiliate_name`,'-',`model`,'-',`ip`,'-',`os_type`,'-',`os_version`) AS device_name
FROM devices
Zwraca wynik podany poniżej
cs1-Dell-10.125.103.25-Linux-Fedora
cs2-Dell-10.125.103.26-Linux-Fedora
(NULL)
(NULL)
Jak z tego wyjść, żeby ignorował NULL, a wynik powinien być
cs1-Dell-10.125.103.25-Linux-Fedora
cs2-Dell-10.125.103.26-Linux-Fedora
cs3-Dell-10.125.103.27-
cs4-Dell-10.125.103.28-
COALESCE
robi funkcja: zwraca pierwszyNULL
przekazany jej parametr niebędący wartością (lubNULL
czy wszystkie parametry sąNULL
). Przekazując pusty ciąg jako drugi parametr, gwarantujesz, że nie zwróciNULL
.Zamiast tego użyj CONCAT_WS :
źródło
Aby mieć taką samą elastyczność w CONCAT_WS, jak w CONCAT (jeśli na przykład nie chcesz, aby ten sam separator między wszystkimi członami) był następujący:
źródło
źródło
CONCAT_WS
nadal daje mi wartość null, jeśli pierwsze pole ma wartość Null. Rozwiązałem to, dodając ciąg o zerowej długości na początku, jak wjednak
daje wartość Null, gdy pierwsze pole ma wartość Null.
źródło
CONCAT_WS("-", affiliate_name, model, ip, os_type, os_version)
możesz użyć instrukcji if, jak poniżej
źródło