Overblog Folge diesem Blog
Edit post Administration Create my blog
Blog von Olaf Helper

Ziffern in Worten fassen

8. Mai 2009 , Geschrieben von Olaf Helper Veröffentlicht in #T-SQL

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

 



Diesen Post teilen

Repost 0

Kommentiere diesen Post