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

UpLower

27. Februar 2009 , Geschrieben von Olaf Helper Veröffentlicht in #T-SQL

Nur ein kleines Gimmick für den MS SQL Server:
In manchen Fällen liegen einem Text komplett in Großschrift vor, was sich sehr schlecht lesen lässt. Komplett in Kleinbuchstaben ist zwar etwas besser lesbar, aber eben auch nur etwas. Um solche Texte aufbereiten zu können, habe ich mir eine kleine UDF als T-SQL erstellt, die alles in Kleinbuchstaben umwandelt und anschließend den ersten Buchstaben eines Wortes durch einen Großbuchstaben ersetzt.
 

 
-- Alte Version löschen, wenn vorhanden
 IF NOT OBJECT_ID('dbo.fnUpLower', 'fn') IS NULL 
  DROP FUNCTION dbo.fnUpLower 
 GO 
   
 -- UDF neu anlegen 
 CREATE FUNCTION dbo.fnUpLower 
  (@Text as varchar(max)) 
  RETURNS varchar(max) 
 AS 
 -- fnUpLower - Stand 11.02.2009 
 -- Wandelt Text in Kleinbuchstaben mit dem ersten Zeichen  
 -- eines Wortes als Großbuchstaben um 
 BEGIN 
  DECLARE @Loop smallint, @Lower char(1), @Upper char(1); 
   
  IF LEN(ISNULL(@Text, '')) > 0 -- Nur wenn es auch Text gibt 
  BEGIN 
  SET @Text = LOWER(@Text) 
  SET @Loop = 97 
  -- Sonderfall: Erstes Zeichen ohne vor. Leerzeichen 
  SET @Text = UPPER(LEFT(@Text, 1)) + SUBSTRING(@Text, 2, LEN(@Text) - 1); 
   
  WHILE @Loop <= 255 
  BEGIN 
  SET @Lower = CHAR(@Loop); 
  SET @Upper = UPPER(@Lower); 
  -- Replace nur wenn nötig; Str-Ops sind "teuer" 
  IF ASCII(@Lower) <> ASCII(@Upper) 
  BEGIN 
  -- Erstes Zeichen nach Space oder Slash auf UPPER 
  SET @Text = REPLACE(@Text, ' ' + @Lower, ' ' + @Upper); 
  SET @Text = REPLACE(@Text, '/' + @Lower, '/' + @Upper); 
  END 
  SET @Loop = @Loop + 1; 
  END 
  END 
  RETURN @Text; 
 END 
 GO 
   
 -- Test 
 SELECT dbo.fnUpLower('TEST THE WEST, MCDONNI: HIER/HEUTE'); 
 -- Gibt es Fehler in Ausnahmefällen? 
 SELECT dbo.fnUpLower(''); -- Leer 
 SELECT dbo.fnUpLower(NULL); -- NULL 
 GO 

 

Ergebnis:

 

 ------------------------------------ 
 Test The West, Mcdonni: Hier/Heute 
   
 (1 Zeile(n) betroffen) 
   
 ------------------------------------ 
   
 (1 Zeile(n) betroffen) 
   
 ------------------------------------ 
 NULL 
   
 (1 Zeile(n) betroffen) 

Diesen Post teilen

Repost 0

Kommentiere diesen Post