как вывести числовое значение словами

В. Отобразите числовое значение в Word, и вывод должен выглядеть следующим образом.

SAL        In_Words
--------- -----------------------------------------------------
800       eight hundred
1600      one thousand six hundred
1250      one thousand two hundred fifty

И я до сих пор не понял, как этот запрос является решением для приведенного выше вывода.

select sal, to_char(to_date(sal,'j'),'Jsp') in_words from emp

Что to_date здесь делает? Кто-нибудь знает об этом запросе?


person Ravi    schedule 20.04.2013    source источник
comment
Прочитайте это: viralpatel.net/blogs/convert-number- запрос-слова-оракула-sql   -  person Tamil Selvan C    schedule 20.04.2013
comment
хорошо ... я следовал шаг за шагом, а затем обнаружил, что to_date(sal,'j') возвращает 09-FEB-08 для 1500. Но, как говорится в этом посте, это добавит January 1, 4713 BC. Теперь, что это значит ??   -  person Ravi    schedule 20.04.2013


Ответы (4)


Итак, как работает запрос? Ну вот почему:

select to_char(to_date(:number,'j'),'jsp') from dual;

Если вы заглянете во внутреннюю часть запроса to_date(:number,'j'), то «j» или J — это юлианская дата (1 января 4713 г. до н.э.), в основном эта дата использовалась для астрономических исследований.

Таким образом, to_date(:number,'j') берет число, представленное числом, и делает вид, что это юлианская дата, конвертирует в дату.

Если вы передадите 3 в число, оно преобразует дату в 3 января 4713 г. до н.э., это означает, что 3 добавляется к дате по юлианскому календарю.

select to_char(to_date(3,'j'),'jsp') from dual;

Теперь to_char(to_date(3,'j'),'jsp'), jsp = Now; возьмите эту дату (to_date (3, 'j')) и запишите юлианское число, которое она представляет, результат:

TO_CH
-----
three

Существует ограничение при использовании дат по юлианскому календарю, оно варьируется от 1 до 5373484. Вот почему, если вы поместите значения после 5373484, вы получите ошибку, как показано ниже:

ORA-01854: julian date must be between 1 and 5373484

Привет всем, интересна эта тема. Я помню, когда я изучал Oracle в 2005 году, один из инструкторов потребовал, чтобы я написал код PL/SQL для преобразования чисел в слова, для этого потребовалось целых две страницы кода.

Вот некоторая ссылка, которая может помочь нам понять юлианский день, поэтому мы используем букву «j» или «J» во время этой операции.

Во-первых, есть веб-сайт, на котором есть пример и объяснение «Как преобразовать число в слова с помощью Oracle SQL Query»:

http://viralpatel.net/blogs/convert-number-into-words-oracle-sql-query/

Во-вторых, если вы хотите узнать больше о «Юлианском дне», перейдите по ссылке:

http://en.wikipedia.org/wiki/Julian_day

В-третьих, если вы хотите узнать больше о том, кто предложил число дней по юлианскому календарю в 1583 году, это был «Иосиф Скалигер»:

http://en.wikipedia.org/wiki/Joseph_Justus_Scaliger

Для меня нет смысла продолжать повторять то, что сделал другой автор на этих веб-сайтах, поэтому я просто разместил ссылку, по которой вы можете получить к ним доступ и прочитать то, что вам нужно, чтобы понять, как работает такой запрос:

SELECT TO_CHAR (TO_DATE (2447834, 'j'), 'jsp') FROM DUAL;

//Вывод: два миллиона четыреста сорок семь тысяч восемьсот тридцать четыре

person S. Mayol    schedule 13.03.2015

Я никогда не слышал о СУБД со встроенной функцией, позволяющей делать то, что вы просите. Вам понадобится таблица имен чисел, чтобы присоединиться к ней один раз на цифру, используя арифметику по модулю, и конкатенацию строк для создания одного столбца In_Words. Плюс немного логики для устранения лидирующих нулей. На написание потребуется время.

person James K. Lowden    schedule 21.04.2013

J обозначает юлианский день - количество дней с 1 января 4712 г. до н.э. Числа в вашей таблице преобразованы в юлианскую дату. JSP указывает дату:

SELECT to_char(SYSDATE,'JSP') AS number_of_days_sinse_4712_BC
  FROM dual
/
person Art    schedule 22.04.2013
comment
Вы имеете в виду... "JSP" просто пишет дату? если так, то выход должен быть двадцать третьего апреля две тысячи тринадцатого года вместо ДВА МИЛЛИОНА ЧЕТЫРЕСОТ ПЯТЬДЕСЯТ ШЕСТЬ ТЫСЯЧ ЧЕТЫРЕСТА ШЕСТЬ. - person Ravi; 23.04.2013
comment
Да. JSP: J-Julian date-преобразует целое число в дату. Это количество дней с 1 января 4712 г. до н.э.: ДВА МИЛЛИОНА ЧЕТЫРЕСТА... Это количество дней с 1 января 4712 г. до н.э. до сегодняшнего дня. И SP - пишет это. Он встроен в функциональность Oracle. - person Art; 23.04.2013
comment
да... я вас понял, но мой вопрос в том, что если это дата, то вывод должен быть двадцать третьего апреля две тысячи тринадцатого года, не так ли? - person Ravi; 23.04.2013
comment
Формат JSP можно использовать только для дат. Вот почему вам нужно сначала преобразовать ваше целое число в дату, и только после этого Oracle сможет произнести ваше целое число за вас. 800 в вашем примере преобразованы в_дату только для того, чтобы Oracle мог написать ее для вас после преобразования даты в_чар с помощью «JSP». Я не могу объяснить это лучше, извините. Не позволяйте этому беспокоить вас слишком много. Просто запомните форматы. - person Art; 23.04.2013

чтобы преобразовать десятичное число в слова, вы можете следовать приведенному ниже коду

SELECT TO_CHAR(to_date(TRUNC(num),'J'),'Jsp')
  ||' and '
  || TO_CHAR(to_date(to_number(SUBSTR(num-TRUNC(num),instr(num-TRUNC(num),'.')+1)),'J'),'Jsp') Indicator
FROM
  (SELECT &enter_numbr num FROM dual
  );

Надеюсь, это поможет!!!

person user_Shilpi    schedule 01.04.2014