Jak działa zapytanie? Oto dlaczego:
select to_char(to_date(:number,'j'),'jsp') from dual;
Jeśli spojrzysz na wewnętrzną większość zapytania to_date(:number,'j') 'j' lub J to data juliańska (1 stycznia 4713 pne), w zasadzie ta data jest używana do badań astronomicznych.
Więc to_date(:number,'j') bierze liczbę reprezentowaną przez liczbę i udaje, że jest to data julijska, zamieniając ją na datę.
Jeśli przekażesz 3 do liczby, co spowoduje konwersję daty na 3 stycznia 4713 pne, oznacza to dodanie 3 do daty juliańskiej.
select to_char(to_date(3,'j'),'jsp') from dual;
Teraz to_char(do_date(3,'j'),'jsp'), jsp =Teraz; weź tę datę(to_date(3,'j')) i przeliteruj numer juliański, który reprezentuje, wynik to:
TO_CH
-----
three
Istnieje ograniczenie przy korzystaniu z dat juliańskich, waha się od 1 do 5373484. Dlatego jeśli wprowadzisz wartości po 5373484, wyrzuci to błąd, jak pokazano poniżej:
ORA-01854: julian date must be between 1 and 5373484
Witam wszystkich, ciekawy jest ten temat. Pamiętam, że kiedy uczyłem się Oracle w 2005 roku, jeden z instruktorów wymagał ode mnie napisania kodu PL/SQL do konwersji liczb na słowa, aby to osiągnąć, był to cały dwustronicowy kod.
Oto odniesienie, które może pomóc nam zrozumieć dzień juliański, dlatego podczas tej operacji używamy litery „j” lub „J”.
Najpierw jest strona internetowa, która zawiera przykład i wyjaśnienie „Jak przekonwertować liczbę na słowa za pomocą zapytania Oracle SQL”:
http://viralpatel.net/blogs/convert- liczba-w-słowach-oracle-sql-query/
Po drugie, jeśli chcesz dowiedzieć się więcej o „Dniu Juliana” wejdź na:
http://en.wikipedia.org/wiki/Julian_day
Po trzecie, jeśli chcesz dowiedzieć się więcej o tym, kto zaproponował numer dnia juliańskiego w 1583 r., był to „Joseph Scaliger”:
http://en.wikipedia.org/wiki/Joseph_Justus_Scaliger
To nie ma sensu, abym kontynuował powtarzanie tego, co zrobił inny autor na tych stronach, dlatego właśnie opublikowałem link, do którego możesz uzyskać dostęp i przeczytać, co potrzebujesz, aby zrozumieć, jak działa takie zapytanie:
SELECT TO_CHAR (TO_DATE (2447834, 'j'), 'jsp') FROM DUAL;
//Wynik:dwa miliony czterysta czterdzieści siedem tysięcy osiemset trzydzieści cztery