Oracle
 sql >> база данни >  >> RDS >> Oracle

Функция TO_CHAR(число) в Oracle

В 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"

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Конкатениране и групиране на множество редове в Oracle

  2. ADDM на SearchOracle.com

  3. ORDER BY с вътрешна заявка, като ORA-00907 липсва дясна скоба

  4. Стъпка по стъпка процес на надграждане за R12.2 Надстройка, част -1

  5. Не може да се компилира GI 12.1.0.2 и грешка при сегментиране