Ziffern in Worten fassen
Zahlen sind das einzig ware, eindeutiger geht es nicht und eigentlich gibt es keine subjektive Interpretation, höchsten eine kontextuelle.
Machmal braucht man aber auf Print-Outs die Zahl als Wort. Hier eine T-SQL Scriptfür den MS SQL Server, das zumindest eine ganz einfache Variante realisiert: Es setzt jede einzelne Ziffer in ein Wort um.
Die z.B. für Scheck-Aufdrucke benötigte Zahlenbezeichnung ist es nicht, aber die kommt noch .. da muss ich noch etwas basteln.
IF OBJECT_ID (N'dbo.fnDigitsAsWord', N'FN') IS NOT NULL
DROP FUNCTION dbo.fnDigitsAsWord;
GO
CREATE FUNCTION dbo.fnDigitsAsWord(@Num numeric(38, 2), @separator varchar)
RETURNS varchar(4000)
AS
-- Autor: Olaf Helper
-- Stand: 08.05.2009
-- Typ: User Defined Function
-- Name: fnDigitsAsWord
-- Gibt für eine Zahl die einzelnen Ziffernwörter aus
-- wobei als Trenner der übergebene Paramter verwendet wird
BEGIN
DECLARE @text varchar(4000);
DECLARE @loop int;
DECLARE @result varchar(4000);
DECLARE @part char;
IF NOT (@Num IS NULL)
BEGIN
SET @text = CONVERT(varchar(4000), @Num);
SET @result = '';
SET @loop = 1;
WHILE @loop <= LEN(@text)
BEGIN
SET @separator = ISNULL(@separator, ' ');
SET @part = SUBSTRING(@text, @loop, 1);
-- Ziffernwörter aufbauen
SET @result = @result +
CASE @part WHEN '-' THEN 'Minus'
WHEN '.' THEN 'Komma'
WHEN '0' THEN 'Null'
WHEN '1' THEN 'Eins'
WHEN '2' THEN 'Zwei'
WHEN '3' THEN 'Drei'
WHEN '4' THEN 'Vier'
WHEN '5' THEN 'Fünf'
WHEN '6' THEN 'Sechs'
WHEN '7' THEN 'Sieben'
WHEN '8' THEN 'Acht'
WHEN '9' THEN 'Neun'
END;
SET @result = @result + @separator;
SET @loop = @loop + 1;
END;
--Letzten Separator entfernen; Vergleich mit Sep = Space
-- geht sonst nicht
IF RIGHT(@result, 1) = @separator AND @separator <> ' '
SET @result = LEFT(@result, LEN(@result) - 1);
END;
RETURN(@result);
END;
GO
-- Unit-Test
SET NOCOUNT ON;
SELECT dbo.fnDigitsAsWord(NULL, '#') AS Word UNION
SELECT dbo.fnDigitsAsWord(1.23456789000, '*') UNION
SELECT dbo.fnDigitsAsWord(12345.6789123400, ' ') UNION
SELECT dbo.fnDigitsAsWord(123456789.123400, '-') UNION
SELECT dbo.fnDigitsAsWord(00.0100, '-');
GO
Ergebnis:
Word
----------------------------------------------------
NULL
Eins Zwei Drei Vier Fünf Komma Sechs Acht
Eins*Komma*Zwei*Drei
Eins-Zwei-Drei-Vier-Fünf-Sechs-Sieben-Acht-Neun-Komma-Eins-Zwei
Null-Komma-Null-Eins