Hallo. 12.566 ==> 00126: Ich hatte die Anforderung, eine Zahl mit führenden nullen am SQL-Server 2008 zu konvertieren bzw. zu erzeugen. Ich entschied mich für eine Funktion. Der Vorteil daran ist, dass man diese dann in einem Trigger, einer CHECK-Einschränkung oder gar in einer SQL-Abfrage verwenden kann. Den direkten Einsatz in SQL-Abfragen würde ich aus Performancegründen nicht empfehlen. Falls jemand eine bessere Lösung hat, wäre ich natürlich froh diese zu erfahren.
USE DeinDatenbankName if exists (select * from dbo.sysobjects where id = object_id(N'F_FillLeadingZeroWithoutFloatingPoint') and xtype in (N'FN', N'IF', N'TF'))BEGIN PRINT 'Lösche die vorhandene Function F_FillLeadingZeroWithoutFloatingPoint' drop function F_FillLeadingZeroWithoutFloatingPoint END PRINT 'Erstelle Function F_FillLeadingZeroWithoutFloatingPoint' GO /********************************************************* Übergabe: Die zu konvertierende Fließkommazahl oder Ganzzahl Die gewünschte Länge des Rückgabestring (ist diese zu gering, werden '*' zurückgegeben) Function: Berechnet einen Wert auf 1/10, wobei die 1/100 gerundet werden, und gibt diesen als String (ohne Komma) der übergebenen Länge mit führenden 0 zurück Rückgabe: VARCHAR mit der angegebenen Länge und fürenden 0 Aufruf : SELECT dbo.F_FillLeadingZeroWithoutFloatingPoint(12.566, 5) ERGIBT '00126' SELECT dbo.F_FillLeadingZeroWithoutFloatingPoint(771.5645, 4) ERGIBT '7716' SELECT dbo.F_FillLeadingZeroWithoutFloatingPoint(1771.456, 4) ERGIBT '****' -> Übergebener Wert zu groß ---------------------------------------------------------- Change History: V1.0 23.03.2005 MStrasser V1.1 24.02.2011 MStrasser *********************************************************/ CREATE FUNCTION F_FillLeadingZeroWithoutFloatingPoint(@Wert float, @RCStringLenght int) RETURNS VARCHAR(20) AS BEGIN -- STR füllt den Linken Bereich mit Leerzeichen, deshalb ist hier noch ein LTRIM nötig RETURN (REPLICATE('0', @RCStringLenght-DATALENGTH(LTRIM(STR(@Wert*10,@RCStringLenght,0)))) + LTRIM(STR(@Wert*10,@RCStringLenght,0))) END /********************************************************/ GO GRANT EXEC ON F_FillLeadingZeroWithoutFloatingPoint TO PUBLIC -- Execute Berechtigung für Public-Rolle setzen GO
Hallo, genau hier lag das Problem, der convert mit Varchar funktioniert mit deiner Lösung, aber nicht mit Fließkommazahlen. Weiters muss man in deinem Beispiel die Anzahl der Nullen hart codieren. Ziel war es Fließkommazahlen in 1/10 zu runden und als beliebig langen(Parameter: @RCStringLenght) String mit führenden Nullen auszugeben.