Boolean Werte in Worte umwandeln

By Frank Kalis

Posted on Aug 20, 2010 von in SQL Server

BOOLEAN Werte sind nicht für jedermann intuitiv. Hier ist ein netter Trick, um 0 und 1 etwas verständlicher zu machen.

Mal angenommen, wir speichern Daten in unserer Tabelle, die logische Informationen repräsentierten und wollen nun das Ergebnis einer Abfrage jemandem geben, der nicht tagtäglich mit Computern arbeitet und deshalb nicht so firm in der Interpretation von 0 und 1 ist. Gut, normalerweise würde man natürlich sagen, dies ist die Aufgabe einer Präsentationsschicht, was aber machen, wenn jemand zu Einem kommt, und dringend um sofortige Hilfe bittet? Hier ist ein netter Trick, diesem Jemand zu helfen:

CREATE TABLE MyBits 
(
 id INT IDENTITY(1,1) PRIMARY KEY 
 , bool BIT
)
GO
INSERT INTO MyBits
 SELECT 0  
 UNION ALL 
 SELECT 1
GO
SELECT 
 id 
 , bool 
 , SUBSTRING('YesNo', 4 - 3 * bool, 3) as YesNo
FROM
 MyBits
GO
DROP TABLE MyBits 

id          bool YesNo 
----------- ---- ----- 
1           0    No
2           1    Yes

(2 row(s) affected)

Wie funktioniert dies nun?

Nun, der eigentliche Trick passiert innerhalb der SUBSTRING Funktion, wenn wir den Startwert für 'YesNo' kalkulieren. Ist der Wert in der Spalte "bool" eine 0 sieht die Kalkulation innerhalb SUBSTRING folgendermassen aus: SUBSTRING('YesNo', 4 - 3 * bool, 3). Das wird zu SUBSTRING('YesNo, 4 - 0, 3) was korrekterweise 'No' zurückgibt. Wir nutzen hier eine weitere Eigenschaft von SUBSTRING. Ist der String, der zurückgegeben werden soll, kürzer, als im Länge Parameter spezifiziert, gibt SUBSTRING diesen kürzeren Wert zurück, ohne den String bis zur angeforderten Länge mit irgendwelchen Füllzeichen aufzufüllen. Ist der Wert in der Spalte "bool" eine 1 sieht die Kalkulation so aus: SUBSTRING('YesNo', 4 - 3 * 1, 3), was zu SUBSTRING('YesNo', 1, 3) wird und damit 'Yes' zurückgibt.

Last, but not least, hat dieser Jemand, dem wir das Ergebnis der Abfrage aushändigen wollen, nicht nur Schwierigkeiten mit der korrekten Interpretation von 0 und 1, sondern auch zusätzlich noch mit dem Englischen, kann man weitere Dienstleistung erbringen, indem man diesen Trick eindeutscht. So, etwa:

SELECT
 id
 , bool
 , SUBSTRING('NeinJa', 5 - 4 * ~bool, 4) as JaNein
FROM
 MyBits

id          bool JaNein 
----------- ---- ------ 
1           0    Nein
2           1    Ja

(2 row(s) affected)

Allerdings muß man hierbei aufpassen, daß ~bool nur mit Spalten vom Datentyp BIT funktioniert. Verwendet man TINYINT o.ä. erhält man einen leeren String zurück. In diesem Fall kann man, wenn man will, eine kleine Gedächtnisstütze einbauen:

SELECT
 id
 , bool
 , SUBSTRING('YesNo', 4 - 3 * bool, 3) as YesNo
 , 'Yes = Ja, No = Nein' AS Erklärung
FROM
	MyBits

id          bool YesNo Erklärung           
----------- ---- ----- ------------------- 
1           0    No    Yes = Ja, No = Nein
2           1    Yes   Yes = Ja, No = Nein

(2 row(s) affected)
Dieser Eintrag wurde eingetragen von und ist abgelegt unter SQL Server. Tags: , ,

Noch kein Feedback


Formular wird geladen...