Tänk på att du omvandlar ett tal till en sträng. Numret har ingen betydelse av "," eller "." eller vad som helst - det är ett nummer.
Tricket är att få TO_CHAR
funktion för att konvertera det interna numret till den strängrepresentation du vill ha. Det finns några problem att oroa sig för:att få radixpunkten (decimal) korrekt och hantera utfyllnad.
Här är ett fungerande exempel:
SELECT to_char(0.00235,'FM99999999999999990D99999', 'NLS_NUMERIC_CHARACTERS = '',.''') FROM DUAL;
0,00235
SELECT to_char(156.45823,'FM99999999999999990D99999', 'NLS_NUMERIC_CHARACTERS = '',.''') FROM DUAL;
156,45823
SELECT to_char(-0.0235,'FM99999999999999990D99999', 'NLS_NUMERIC_CHARACTERS = '',.''') FROM DUAL;
-0,0235
SELECT to_char(-156.45623,'FM99999999999999990D99999', 'NLS_NUMERIC_CHARACTERS = '',.''') FROM DUAL;
-156,45623
SELECT to_char(123456789.45623,'FM99999999999999990D99999', 'NLS_NUMERIC_CHARACTERS = '',.''') FROM DUAL;
123456789,45623
De relevanta delarna av masken:
FM
används för att trimma ledande och efterföljande ämnen som Oracle normalt använder för att fylla ut nummer.
D
är radixpunkten, beroende på dina NLS-inställningar.
NLS_NUMERIC_CHARACTERS ...
är en åsidosättande av dina lokala NLS-inställningar – det här kanske inte är nödvändigt om din lokalitet använder kommatecken för decimalen, men det är ett sätt att tvinga fram detta beteende i en databas med exempelvis nordamerikanska inställningar.