Ausgabe beim Select manipulieren
Autor: Varsamis Karamanidis (Macky), Ralf v.d.Mark
eingetragen: Mittwoch, 18. August 2010 um 08:36 Uhr (33/2010 Kalenderwoche)
geändert: Mittwoch, 15. Februar 2017 um 10:08 Uhr (7/2017 Kalenderwoche)
Keywords: Select case ifnull manipulieren ersetzen replace Zeichenkonvertierung concat ELSEIF
Kategorien: DB: MySQL, DB: MariaDB,
Text:
Bei der Ausgabe, kann man andere Werte vortäuschen/ausgeben.
Fall 1: Beim Select beim Auftreten eines bestimmten Wertes (22) einen anderen Wert (33) ausgeben.
HINWEIS: Dieser kommt auch dann, wenn es den Wert in der Tabelle schon gibt.
Fall 2: Wenn ein Feld leer ist, dann soll ein anderes ausgegeben werden.
Fall 3: Führt Datenfelder aus unterschiedlichen Tabellen zusammen, blendet Datensätze ab einem bestimmten Alter aus. In der Jobboerse wurde die Query als View benutzt.
Siehe auch TechDox-Artikel:
DB-Tabelleninhalte bearbeiten
Weiteres:
http://www.oreilly.de/catalog/sqlnutger/chapter/ch04.html
http://dev.mysql.com/doc/refman/5.0/en/if.html
Quellcode:
Fall 1:
SELECT tab.id, tab.txt,
CASE WHEN tab.spalte_id = 22
OR tab.spalte_id = 11
THEN 33
ELSE tab.spalte_id END
AS spalte_id
FROM db_tabelle AS tab
Tabelle original:
id | txt | spalte_id
----------------------
1 | bla1 | 233
2 | bla2 | 11
2 | bla2 | 22
3 | bla3 | 233
Tabellen-Ausgabe:
id | txt | spalte_id
----------------------
1 | bla1 | 233
2 | bla2 | 33
2 | bla2 | 33
3 | bla3 | 233
______________________________________________
Fall 2:
SELECT tab.id, tab.txt,
IFNULL(tab.spalte_id, tab.id) AS spalte_id
FROM db_tabelle AS tab
Tabelle original:
id | txt | spalte_id
----------------------
1 | bla1 | 233
2 | bla2 |
3 | bla3 | 233
Tabellen-Ausgabe:
id | txt | spalte_id
----------------------
1 | bla1 | 233
2 | bla2 | 2
3 | bla3 | 233
______________________________________________
Fall 3:
SELECT beknd.`bekund_id`,
beknd.`person_id`,
DATE(beknd.`bekund_gueltigkeit_datum`) AS bekund_gueltigkeit_datum,
FORMAT(beknd.`bekund_gehalt_in_euro`, 2) AS bekund_gehalt_in_euro,
beknd.`bekund_gueltig_bis`,
beknd.`bekund_freitext`,
CONCAT(beknd.`bekund_name`, ' (', beknd.`bekund_krzl`, ')')
AS bekund_ausgabe,
beknd.`bekund_eingabe_dat`,
beknd.`bekund_veroeff_dat`,
beknd.`bekund_update_dat`,
beknd.`bekund_status`,
beknd.`bekund_herkunft_anzeigen`,
herkft.`bland_id` AS herkft_bland_id,
CASE WHEN beknd.`bekund_herkunft_anzeigen` = 1
THEN herkft.ort_name
ELSE NULL END
AS herkft_ort_name,
CASE WHEN beknd.`bekund_herkunft_anzeigen` = 1
THEN (SELECT `bland_k_name`
FROM `view_ipa_bundeslaender` AS bland
WHERE bland.`bland_id` = herkft.`bland_id`)
ELSE NULL END
AS herkft_bland_name,
CASE WHEN beknd.`bekund_herkunft_anzeigen` = 1
THEN (SELECT CONCAT_WS("; ",
`bland_name`,
`bland_k_name`,
`bland_kurz`)
FROM `view_ipa_bundeslaender` AS bland
WHERE bland.`bland_id` = herkft.`bland_id`)
ELSE NULL END
AS herkft_bland_zum_suchen,
GROUP_CONCAT(ziel.`ort_name`
SEPARATOR ", ") AS ziel_orte,
GROUP_CONCAT(ziel.`bland_id`
SEPARATOR ", ") AS ziel_bland_ids,
CONCAT_WS(', ', DATE_FORMAT(NOW(), '%Y%m%d')) AS bekund_wert_heute,
CASE
WHEN `fobi_id` > 9999
THEN ((`fobi_id` * 100000) + `pers_id`)
ELSE
CASE
WHEN `fobi_id` > 999
THEN ((`fobi_id` * 1000000) + `pers_id`)
ELSE
CASE
WHEN `fobi_id` > 99
THEN ((`fobi_id` * 10000000) + `pers_id`)
ELSE
CASE
WHEN `fobi_id` > 9
THEN ((`fobi_id` * 100000000) + `pers_id`)
ELSE ((`fobi_id` * 1000000000) + `pers_id`)
END
END
END
END AS NeueSchoeneZahl
FROM `jb_bekundung` AS beknd,
`jb_bekund_ziel` AS ziel,
`jb_person_herkunft` AS herkft
WHERE beknd.`bekund_id` = ziel.`bekund_id`
AND beknd.`person_id` = herkft.`person_id`
AND beknd.`bekund_status` = 1
AND beknd.`bekund_gueltig_bis` > CONCAT_WS(', ',
DATE_FORMAT(NOW(),
'%Y%m%d'))
GROUP BY beknd.`bekund_id`;
______________________________________________
DELIMITER //
CREATE FUNCTION SimpleCompare(n INT, m INT)
RETURNS VARCHAR(20)
BEGIN
DECLARE s VARCHAR(20);
IF n > m THEN SET s = '>';
ELSEIF n = m THEN SET s = '=';
ELSE SET s = '<';
END IF;
SET s = CONCAT(n, ' ', s, ' ', m);
RETURN s;
END //
DELIMITER ;