sql >> データベース >  >> RDS >> Oracle

Oracle:数値を英語以外の言語の単語に変換する

    これはクールなトリックです(Julianを取り出してそれを吐き出すjsp形式)。 トムに質問する記事を見つけました それはより詳細を与えます。ただし、基本的にjsp形式は英語でのみ機能しますが、関数でラップして英語を別の言語に翻訳することができます。

    たとえば、トムのspell_number関数は次のとおりです。

    create or replace 
     function spell_number( p_number in number ) 
     return varchar2 
     as 
     type myArray is table of varchar2(255); 
     l_str myArray := myArray( '', 
     ' thousand ', ' million ', 
     ' billion ', ' trillion ', 
     ' quadrillion ', ' quintillion ', 
     ' sextillion ', ' septillion ', 
     ' octillion ', ' nonillion ', 
     ' decillion ', ' undecillion ', 
     ' duodecillion ' ); 
    
     l_num varchar2(50) default trunc( p_number ); 
     l_return varchar2(4000); 
     begin 
     for i in 1 .. l_str.count 
     loop 
     exit when l_num is null; 
    
     if ( substr(l_num, length(l_num)-2, 3) <> 0 ) 
     then 
     l_return := to_char( 
     to_date( 
     substr(l_num, length(l_num)-2, 3), 
     'J' ), 
     'Jsp' ) || l_str(i) || l_return; 
     end if; 
     l_num := substr( l_num, 1, length(l_num)-3 ); 
     end loop; 
    
     return l_return; 
     end; 
     /
    

    そして、フランス語のバージョンは(どうやら)いくつかのフランス語の翻訳でspell_numberを使用しています:

    create or replace 
    function spell_number_french( p_number in number ) 
    return varchar2 
    as 
    begin 
    return replace( replace( replace( replace( replace( 
    replace( replace( replace( replace( replace( 
    replace( replace( replace( replace( replace( 
    replace( replace( replace( replace( replace( 
    replace( replace( replace( replace( replace( 
    replace( replace( replace( replace( replace( 
    replace( replace( replace( replace( replace( 
    replace( replace( replace( replace( replace( 
    replace( 
    lower( spell_number( p_number )) 
    , 'duodecillion', 'bidecillion' ) 
    , 'quintillion' , 'cintillion' ) 
    , 'billion' , 'milliard' ) 
    , 'thousand' , 'mille' ) 
    , 'hundred' , 'cent' ) 
    , 'ninety' , 'quatre-vingt-dix') 
    , 'eighty' , 'quatre-vingt' ) 
    , 'seventy' , 'soixante-dix' ) 
    , 'sixty' , 'soixante' ) 
    , 'fifty' , 'cinquante' ) 
    , 'forty' , 'quarante' ) 
    , 'thirty' , 'trente' ) 
    , 'twenty' , 'vingt' ) 
    , 'nineteen' , 'dix-neuf' ) 
    , 'eighteen' , 'dix-huit' ) 
    , 'seventeen' , 'dix-sept' ) 
    , 'sixteen' , 'seize' ) 
    , 'fifteen' , 'quinze' ) 
    , 'fourteen' , 'quatorze' ) 
    , 'thirteen' , 'treize' ) 
    , 'twelve' , 'douze' ) 
    , 'eleven' , 'onze' ) 
    , 'ten' , 'dix' ) 
    , 'nine' , 'neuf' ) 
    , 'eight' , 'huit' ) 
    , 'seven' , 'sept' ) 
    , 'five' , 'cinq' ) 
    , 'four' , 'quatre' ) 
    , 'three' , 'trois' ) 
    , 'two' , 'deux' ) 
    , 'one' , 'un' ) 
    , 'dix-six' , 'seize' ) 
    , 'dix-cinq' , 'quinze' ) 
    , 'dix-quatre' , 'quatorze' ) 
    , 'dix-trois' , 'treize' ) 
    , 'dix-deux' , 'douze' ) 
    , 'dix-un' , 'onze' ) 
    , '-un ' , '-une ' ) 
    , 'un cent' , 'cent' ) 
    , 'un mille' , 'mille' ) 
    , 'une' , 'un' ); 
    end spell_number_french; 
    

    選択した言語と同様のことを行います。さらに詳細な説明については、AskTomのリンクを参照してください。



    1. WHERE句を使用するか、アプリケーションコードを使用して、結果セットをフィルタリングする方がよいでしょうか。

    2. TSQL-データベース内のすべてのテーブルに列を追加する[カーソルの例]

    3. oraclesqlスクリプトスプールファイルの作成方法

    4. MySQLデータベーススキーマをGitHubに含める方法は?