2011-01-30 22 views
1
SELECT REPLACE(TRANSLATE(LTRIM(RTRIM('!! ATHEN !!','!'), '!'), 'AN', '**'),'*','TROUBLE') FROM DUAL; 

上記の質問と、このクエリの仕組みが混同していますか?このSQLクエリはどのように機能しますか?

+2

あなたはどう思いますか? –

+1

私はこの質問をした理由が分かりません –

+0

あなたはそれを実行しようとするか、いくつかの改行とインデントを入れることができます。プログラミングコードのように、クエリーは空白も許されます。 :) – GolezTrol

答えて

8
SELECT 
    REPLACE(
    TRANSLATE(
     LTRIM(
     RTRIM('!! ATHEN !!','!') 
     , '!') 
     , 'AN' 
     , '**') 
    ,'*' 
    ,'TROUBLE') 
FROM DUAL; 

MySQLでは動作しません。

これは、単一の定数値を返します。 DUALは1レコードのシステムテーブルです。デュアルが常に存在するため、クエリーするテーブルが実際にない場合は、定数値を選択できます。 FROM DUALはMySQLで省略することができますが、実際にはOracleとの互換性を高めるためにMySQLに追加されています。このクエリは何をすべき

  • それはテキストを取ります!アテネ!!
  • 「!」をトリムします。 (ltrimとrtrim)
  • これはAとNを**に翻訳します。
  • それはだから私は、出力が「TROUBLETHETROUBLE」のようなものであることを期待したい「TROUBLE」

で各*を置き換えます。

つまり、Oracle上で実行する場合です。 Nanne氏がコメントで指摘したように、MySQLはRTRIMの第2パラメータを受け入れません。

+1

面白いことに、「RTRIM」は私が知る限りMYSQLで2つのパラメータを取らないということです。 http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_rtrim – Nanne

+0

はい、あなたは正しいです。私はこれが結局Oracleクエリでなければならないと思う。 – GolezTrol

+0

translate()は私が知っている限りMySQLの機能ではない –

関連する問題