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

MYSQLの結果で数値を単語に変換します!クエリの使用

    MySQLには、この結果を達成できる関数を使用して関数を作成する必要がある単純な関数はありません。

    以下を確認してください..それは私のために働きます..リファレンス

       DELIMITER $$
        CREATE FUNCTION `number_to_string`(n INT) RETURNS varchar(100)
        BEGIN
            -- This function returns the string representation of a number.
            -- It's just an example... I'll restrict it to hundreds, but
            -- it can be extended easily.
            -- The idea is: 
            --      For each digit you need a position,
            --      For each position, you assign a string
            declare ans varchar(100);
            declare dig1, dig2, dig3 int; -- (one variable per digit)
    
            set ans = '';
    
            set dig3 = floor(n / 100);
            set dig2 = floor(n / 10) - dig3*10;
            set dig1 = n - (dig3*100 + dig2*10);
    
            if dig3 > 0 then
                case
                    when dig3=1 then set ans=concat(ans, 'one hundred');
                    when dig3=2 then set ans=concat(ans, 'two hundred');
                    when dig3=3 then set ans=concat(ans, 'three hundred');
                    when dig3=4 then set ans=concat(ans, 'four hundred');
                    when dig3=5 then set ans=concat(ans, 'five hundred');
                    when dig3=6 then set ans=concat(ans, 'six hundred');
                    when dig3=7 then set ans=concat(ans, 'seven hundred');
                    when dig3=8 then set ans=concat(ans, 'eight hundred');
                    when dig3=9 then set ans=concat(ans, 'nine hundred');
                    else set ans = ans;
                end case;
            end if;
    
            if dig2 = 1 then
                case
                    when (dig2*10 + dig1) = 10 then set ans=concat(ans,' ten');
                    when (dig2*10 + dig1) = 11 then set ans=concat(ans,' eleven');
                    when (dig2*10 + dig1) = 12 then set ans=concat(ans,' twelve');
                    when (dig2*10 + dig1) = 13 then set ans=concat(ans,' thirteen');
                    when (dig2*10 + dig1) = 14 then set ans=concat(ans,' fourteen');
                    when (dig2*10 + dig1) = 15 then set ans=concat(ans,' fifteen');
                    when (dig2*10 + dig1) = 16 then set ans=concat(ans,' sixteen');
                    when (dig2*10 + dig1) = 17 then set ans=concat(ans,' seventeen');
                    when (dig2*10 + dig1) = 18 then set ans=concat(ans,' eighteen');
                    when (dig2*10 + dig1) = 19 then set ans=concat(ans,' nineteen');
                    else set ans=ans;
                end case;
            else
                if dig2 > 0 then
                    case
                        when dig2=2 then set ans=concat(ans, ' twenty');
                        when dig2=3 then set ans=concat(ans, ' thirty');
                        when dig2=4 then set ans=concat(ans, ' fourty');
                        when dig2=5 then set ans=concat(ans, ' fifty');
                        when dig2=6 then set ans=concat(ans, ' sixty');
                        when dig2=7 then set ans=concat(ans, ' seventy');
                        when dig2=8 then set ans=concat(ans, ' eighty');
                        when dig2=9 then set ans=concat(ans, ' ninety');
                        else set ans=ans;
                    end case;
                end if;
                if dig1 > 0 then
                    case
                        when dig1=1 then set ans=concat(ans, ' one');
                        when dig1=2 then set ans=concat(ans, ' two');
                        when dig1=3 then set ans=concat(ans, ' three');
                        when dig1=4 then set ans=concat(ans, ' four');
                        when dig1=5 then set ans=concat(ans, ' five');
                        when dig1=6 then set ans=concat(ans, ' six');
                        when dig1=7 then set ans=concat(ans, ' seven');
                        when dig1=8 then set ans=concat(ans, ' eight');
                        when dig1=9 then set ans=concat(ans, ' nine');
                        else set ans=ans;
                    end case;
                end if;
            end if;
    
            return trim(ans);
        END$$
    
        DELIMITER ;
    

    次のエラーが発生した場合..

    #1418 - This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you might want to use the less safe log_bin_trust_function_creators variable)
    

    このクエリを実行します:

    SET GLOBAL log_bin_trust_function_creators = 1;
    

    その後、Mysqlで関数を作成します:

    次のコマンドのように関数を呼び出します。

    SELECT number_to_string( 666 );
    

    次のように出力されます:

    number_to_string( 666 )
    six hundred sixty six
    

    これが他の人の役に立つことを願っています!



    1. SQLServerの既存のテーブルに外部キー制約を追加する方法-SQLServer/TSQLチュートリアルパート68

    2. CodeIgniterフレームワークを使用して配列から複数の行を挿入するにはどうすればよいですか?

    3. node.js async/awaitをMySQLで使用する

    4. SQL ServerのSAログインでパスワードを変更する(T-SQLの例)