Inhalt
Überblick
SQL Server stellt für die Speicherung von Ja/Nein-Informationen den Datentyp bit zur Verfügung. Die Konvertierung eines Eingangswertes in einen Wert vom Typ bit kann eine kleine Herausforderung darstellen. Idealerweise werden Ja/Nein-Informationen im Quellsystem in einem Datentyp gespeichert, der lediglich eine 0 oder 1 zulässt. Tatsächlich werden Ja/Nein-Informationen auf zum Teil kuriose Weise als Text gespeichert. Zu finden sind die noch verständlichen Texte Y und N für Yes und No oder J und N für Ja und Nein. Zu finden sind aber auch ON und OFF, ein x oder ein Minus-Zeichen und vieles mehr. SQL Server kann für die zahlreichen Varianten der Speicherung einer Ja/Nein-Information keine allgemeingültige Konvertierungsfunktion bereitstellen. Der Entwickler muss hierfür eine benutzerdefinierte Funktion schreiben, die die Konvertierung durchführt und im Fehlerfall – analog zu der Funktion TRY_CONVERT – ein NULL. Dieser Artikel stellt eine solche die Funktion [dbo].[fnConvertBit] vor. Erwartete Werte werden in dieser Funktion hart codiert und in eine 0 oder 1 übersetzt. Für unbekannte Werte wird ein NULL zurückgegeben. Diese Funktion ist ggf. an die tatsächlich gelieferten Werte anzupassen. Eine Unterscheidung, in welchem Datentyp ein Eingangswert übergeben wird, ist nicht erforderlich. Der Parameter p_Value ist vom Typ nvarchar. Sofern Werte vom Typ Kein Text übergeben werden, führt SQL Server eine implizite Konvertierung des übergebenen Wertes in einen Wert vom Typ-nvarchar durch.
[dbo].[fnConvertBit]
Beschreibung
Konvertiert einen übergebenen Eingangswert in den Zieldatentyp bit. Kann der Eingangswert nicht umgewandelt werden, wird NULL zurückgegeben. Der übergebene Wert wird Case Insensitive behandelt.
Syntax
[dbo].[fnConvertBit](@p_value AS nvarchar(5))
Argumente
- p_value
Gibt den umzuwandelnden Eingangswert an.
Rückgabe
Gibt den umgewandelten Wert als Wert vom Typ bit zurück, wenn die Umwandlung erfolgreich ist. Kann der Eingangswert nicht umgewandelt werden, wird NULL zurückgegeben.
Unterstützte Eingangswerte
True | False |
‘J’ | ‘N’ |
‘JA’ | ‘NEIN’ |
‘Y’ | ‘N’ |
‘YES’ | ‘NO’ |
‘1’, ‘-1’ | ‘0’ |
‘ON’ | ‘OFF’ |
‘TRUE’ | ‘FALSE’ |
‘x’ | ‘-‘ |
Code
1: CREATE FUNCTION [dbo].[fnConvertBit] (@p_value AS nvarchar(5))
2: RETURNS bit
3: AS
4: BEGIN
5: -- --------------------------------------------------------------------------------
6: -- Declare variables
7: -- --------------------------------------------------------------------------------
8: DECLARE @returnValue AS bit;
9:
10: -- --------------------------------------------------------------------------------
11: -- Workload
12: -- --------------------------------------------------------------------------------
13: SET @p_value = UPPER(TRIM(@p_value));
14: SET @returnValue = CASE @p_value
15: WHEN N'J' THEN 1
16: WHEN N'JA' THEN 1
17: WHEN N'Y' THEN 1
18: WHEN N'YES' THEN 1
19: WHEN N'N' THEN 0
20: WHEN N'NEIN' THEN 0
21: WHEN N'NO' THEN 0
22: WHEN N'TRUE' THEN 1
23: WHEN N'FALSE' THEN 0
24: WHEN N'ON' THEN 1
25: WHEN N'OFF' THEN 0
26: WHEN N'-1' THEN 1
27: WHEN N'1' THEN 1
28: WHEN N'0' THEN 0
29: WHEN N'-' THEN 0
30: ELSE NULL
31: END;
32:
33: RETURN @returnValue;
34: END;
Und hier einige Beispiele…
1: SELECT [dbo].[fnConvertBit](N'1'); -- 1
2: SELECT [dbo].[fnConvertBit](N'0'); -- 0
3: SELECT [dbo].[fnConvertBit](N'J'); -- 1
4: SELECT [dbo].[fnConvertBit](N'ja'); -- 1
5: SELECT [dbo].[fnConvertBit](N'N'); -- 0
6: SELECT [dbo].[fnConvertBit](N'nein'); -- 0
7: SELECT [dbo].[fnConvertBit](N' '); -- NULL
8: SELECT [dbo].[fnConvertBit](N'X'); -- NULL
9: SELECT [dbo].[fnConvertBit](NULL); -- NULL
10: SELECT [dbo].[fnConvertBit](N'true'); -- 1
11: SELECT [dbo].[fnConvertBit](N'false'); -- 0
12: SELECT [dbo].[fnConvertBit](N'ON'); -- 1
13: SELECT [dbo].[fnConvertBit](N'OFF'); -- 0
14: SELECT [dbo].[fnConvertBit](N'-'); -- 0
15: SELECT [dbo].[fnConvertBit](NULL); -- 1
Zusammenfassung
SQL Server stellt für die Speicherung von Ja/Nein-Informationen den Datentyp bit zur Verfügung. Die Konvertierung eines Eingangswertes in einen Wert vom Typ bit kann eine kleine Herausforderung darstellen, da Ja/Nein-Informationen im Quellsystem auf sehr unterschiedliche Arten gespeichert werden können. Die Funktion übersetzt übergebene Texte in einen Wert vom Typ bit und simuliert die TRY_CONVERT Funktion, in dem sie bei einem Fehler ein NULL zurückgibt.
Verwandte Artikel
- Datenqualität in einem ETL-Prozess
- Datenqualität // Grundlagen der Typ-Konvertierung mit T-SQL
- TRY_CONVERT // Konvertierung nach bigint, int, smallint, tinyint
- TRY_CONVERT // Konvertierung nach decimal oder numeric
- TRY_CONVERT // Konvertierung nach money, smallmoney
- TRY_CONVERT // Konvertierung nach float, real
- TRY_CONVERT // Konvertierung nach bit
- TRY_CONVERT // Konvertierung nach date, datetime, datetime2, time