| 

.NET C# Java Javascript Exception

1
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
24.02.2011
MStrasser 195 6
3 Antworten
1
Ich verstehe nicht ganz den Sinn ...

RIGHT('00000'+ CONVERT(VARCHAR, NummernFeld), 6)
24.02.2011
nabuchodonossor 1,2k 4
Verzeihung, ich hätte hier Antworten sollen, und nicht in einer neuen Antwort.
MStrasser 24.02.2011
0
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.
DECLARE @i decimal(9,3)
SET @i = 12.6
select RIGHT('0000000'+ CONVERT(VARCHAR, @i), 7)
--Ergebnis: 012.600
select dbo.F_FillLeadingZeroWithoutFloatingPoint(@i, 7)
--Ergebnis: 0000126
24.02.2011
MStrasser 195 6
ok, die Fliesskommas sind natürlich ein Quirks.
nabuchodonossor 24.02.2011
0
Das mit dem Hartcodieren der 0en kannst du noch umgehen:

replicate('0', x)
24.02.2011
tb 220 3

Stelle deine Sql-Frage jetzt!