В Oracle Database, TO_CHAR(number)
функция преобразува число в VARCHAR2
стойност във формата, посочен от аргумента format.
Синтаксис
Синтаксисът е така:
TO_CHAR(n [, fmt [, 'nlsparam' ] ])
Къде:
n
може да бъде от типNUMBER
,BINARY_FLOAT
, илиBINARY_DOUBLE
.fmt
е допълнителен модел на форматиране, който определя как трябва да бъде форматиран резултатът. Вижте валидните елементи на числовия формат, които могат да се използват за конструиране на вашия форматен модел.'nlsparam'
е незадължителен аргумент, който указва как се връщат различни знаци. Можете да го използвате, за да посочите десетичния знак и разделителя на групата, символа за местна валута и символа за международна валута. Ако този аргумент е пропуснат, тогава се използват стойностите по подразбиране за текущата сесия.
Пример
Ето пример, за да демонстрирате как работи функцията:
SELECT TO_CHAR(12345, '99G999') AS Result
FROM DUAL;
Резултат:
RESULT __________ 12,345
Първият аргумент е действителното число, което форматираме, а вторият аргумент е моделът на форматиране. Форматният модел указва как се форматира числото.
В този случай нашият форматен модел форматира числото с разделител на група в подходяща позиция. Всяка цифрова цифра е представена с 9
, а груповият разделител е представен с G
.
Ето какво се случва, ако леко променим модела на формат:
SELECT TO_CHAR(12345, '099G999') AS Result
FROM DUAL;
Резултат:
RESULT ___________ 012,345
В този случай стартирахме модела на форматиране с 0
характер. Това връща водеща нула, където е приложимо. 9
символът не връща водещи нули.
Всъщност бихме могли да заменим всички 9
s с 0
с ако искаме. Ето сравнение, което показва как резултатите могат да се различават доста значително, в зависимост от това кой форматен елемент използвате:
SELECT
TO_CHAR(12, '000G000') AS "000G000",
TO_CHAR(12, '999G999') AS "999G999"
FROM DUAL;
Резултат:
000G000 999G999 ___________ ___________ 000,012 12
Символи за валути
Можете да използвате L
елемент формат за връщане на символа за местна валута.
Пример:
SELECT TO_CHAR(12345, 'L99G999D99') AS Result
FROM DUAL;
Резултат:
RESULT _______________________ $12,345.00
Този пример използва модел на формат, който извежда резултата с помощта на символа на местна валута (представен от L
), разделител на групи (представен от G
). ), десетичен знак (представен с D
). ) и, разбира се, всяка цифрова цифра (представена с 9
).
Символът на местната валута се определя от текущата стойност на NLS_CURRENCY
параметър. Вярно е, че можехме да използваме знак за долар ($
) за символа на валутата, но това предполага, че валутата е деноминирана в долари. Има много други възможни валути по света и L
Елементът format може динамично да връща символа на местна валута за сесията на потребителя.
Вижте как да проверите стойностите на NLS параметрите, ако трябва да ги проверите.
Вижте този пълен списък на елементите на числовия формат в Oracle за списък с елементи на формат, които могат да се използват за форматиране на числа с тази функция.
Формат по подразбиране
Ако пропуснете fmt
аргумент, числото се преобразува в VARCHAR2
стойност достатъчно дълго, за да задържи значимите си цифри.
Ето пример за преобразуване на число без посочване на формата:
SELECT TO_CHAR(525.45)
FROM DUAL;
Резултат:
525.45
'nlsparam'
Аргумент
'nlsparam'
Аргументът може да се използва за определяне на десетичния знак и разделителя на групата, символа за местна валута и символа за международна валута.
Приема следната форма:
'NLS_NUMERIC_CHARACTERS = ''dg''
NLS_CURRENCY = ''text''
NLS_ISO_CURRENCY = territory '
Пример:
SELECT
TO_CHAR(
1234.56,
'L99G999D99',
'NLS_NUMERIC_CHARACTERS = '',.''
NLS_CURRENCY = ''€''
NLS_ISO_CURRENCY = Germany'
)
FROM DUAL;
Резултат:
€1.234,56
Ето го отново, но този път замествам L
с C
във формат модел:
SELECT
TO_CHAR(
1234.56,
'C99G999D99',
'NLS_NUMERIC_CHARACTERS = '',.''
NLS_CURRENCY = ''€''
NLS_ISO_CURRENCY = Germany'
)
FROM DUAL;
Резултат:
EUR1.234,56
C
връща символа за валута ISO, който в този случай е EUR
.
Как да потиснем подложката
Може да сте забелязали, че някои от примерите имат подплънки, приложени отляво на резултатите. Такава подплата може да бъде премахната с fm
модификатор на формат.
Пример:
SELECT
TO_CHAR(
1234.56,
'fmL99G999D99',
'NLS_NUMERIC_CHARACTERS = '',.''
NLS_CURRENCY = ''€''
NLS_ISO_CURRENCY = Germany'
)
FROM DUAL;
Резултат:
€1.234,56
Нулеви аргументи
Предаването на null
води до null
:
SET NULL 'null';
SELECT TO_CHAR(null)
FROM DUAL;
Резултат:
null
По подразбиране SQLcl и SQL*Plus връщат празно пространство всеки път, когато null
възниква в резултат на SQL SELECT
изявление.
Можете обаче да използвате SET NULL
за да посочите различен низ, който да бъде върнат. Тук посочих, че низът null
трябва да бъдат върнати.
Липсващ аргумент
Извикването на функцията без предаване на аргументи води до грешка:
SELECT TO_CHAR()
FROM DUAL;
Резултат:
SQL Error: ORA-00938: not enough arguments for function 00938. 00000 - "not enough arguments for function"
Предаването на твърде много аргументи също води до грешка:
SELECT TO_CHAR(123, '99', 'NLS_ISO_CURRENCY = GERMANY', 'oops!' )
FROM DUAL;
Резултат:
SQL Error: ORA-00939: too many arguments for function 00939. 00000 - "too many arguments for function"