Så hur fungerar frågan? Här är anledningen:
select to_char(to_date(:number,'j'),'jsp') from dual;
Om du tittar på den inre delen av frågan to_date(:number,'j') är 'j' eller J det julianska datumet (1 januari 4713 f.Kr.), i princip har detta datum använts för astronomiska studier.
Så to_date(:number,'j') tar det talet som representeras av tal och låtsas att det är ett julianskt datum, konvertera till ett datum.
Om du skickar 3 till nummer, så att det konverterar datum till 3 januari 4713 f.Kr., betyder det att 3 läggs till det julianska datumet.
select to_char(to_date(3,'j'),'jsp') from dual;
Nu to_char(to_date(3,'j'),'jsp'), jsp =Nu; ta det datumet(to_date(3,'j')) och stava juliantalet det representerar, utdata är:
TO_CH
-----
three
Det finns en begränsning när du använder julianska datum, den sträcker sig från 1 till 5373484. Det är därför om du sätter värdena efter 5373484, kommer det att ge dig ett fel som visas nedan:
ORA-01854: julian date must be between 1 and 5373484
Hej alla, det är intressant detta ämne. Jag minns när jag lärde mig Oracle 2005, en av instruktörerna krävde att jag skulle skriva en PL/SQL-kod för att konvertera siffror till ord, det var en kod på hela två sidor för att nå detta.
Här är en referens som kan hjälpa oss att förstå den julianska dagen, det är därför vi använder bokstaven 'j' eller 'J' under denna operation.
Först finns det en webbplats som har exemplet och förklaringen om "Hur man konverterar tal till ord med Oracle SQL Query":
http://viralpatel.net/blogs/convert- nummer-in-ord-oracle-sql-query/
För det andra om du vill veta mer om "Juliandagen" gå till:
http://en.wikipedia.org/wiki/Julian_day
För det tredje om du vill veta mer om vem som föreslog det julianska dagsnumret 1583, det var av "Joseph Scaliger":
http://en.wikipedia.org/wiki/Joseph_Justus_Scaliger
Det är inte logiskt för mig att fortsätta att upprepa vad en annan författare på dessa webbplatser har gjort, det är därför jag precis postade länken så att du kan komma åt dem och läsa vad du behöver för att förstå hur en fråga som denna fungerar:
SELECT TO_CHAR (TO_DATE (2447834, 'j'), 'jsp') FROM DUAL;
//Utgång:två miljoner fyra hundra fyrtiosju tusen åtta hundra trettiofyra