2 返信 最新の回答 日時: Jan 28, 2009 9:21 PM ユーザー:ranja

    SELECT SQLでの文字列の連結がうまくいかない

    ranja

      タイトル

      SELECT SQLでの文字列の連結がうまくいかない

      フォーラムに投稿

      こんにちは。

       

      ODBCを使ってFileMaker Server Advacned 8/9に対し

      SELECT STRVAL(FieldA) + '-' + STRVAL(FieldB) FROM TableA

      のようなSQLを実行した場合、FieldAとFieldBが数字タイプのフィールドの場合、なぜか結果は足し算(たとえばFieldA=20, FieldB=30なら50)となってしまいます。(STRVAL関数はあってもなくても同じです。)

      '20-30'といった文字列が返るべきだと思うのですが、何がいけないのでしょう。ちなみに

      SELECT STRVAL(FieldA) + '-' + TextFieldB FROM TableA

      のようにテキストタイプのフィールドTextFieldBが式に含まれていると期待通りにできます。

      これもバージョン10なら直っているのでしょうか。

       

       

       

        • 1. Re: SELECT SQLでの文字列の連結がうまくいかない
          YODA
            

          Ranja さん、こんばんは。

           

          当件も、手元の環境で再現する事は確認しました。(FM10でのテストは出来ていません。)

           

          気になるのは、FileMaker Server の odbc_jdbcガイド(pdfのマニュアル)を見てみると、STRVAL 関数で記載されている使用例がすべて規定値を与えた場合の例のみで、フィールドを指定した場合の記述が一切無いので、ひょっとするとフィールドの型変換目的には使えないのではないかと思いました。(そうなると関数の使い道がちょっと謎ではありますが。)

           

          念の為、FM10も該当マニュアルは覗いてみたのですが、ほぼFM9のコピペ的な内容でしたので、変わらない可能性が高いような気がします。

           

          テキスト以外のデータのODBCでの処理については、処理系によって日付のフォーマット(yyyy/mm/dd→mm-dd-yyyy)が異なりうまくインポートが出来なかったりとハマった経験があり、結果として、FileMaker 上に一旦テキスト変換後の文字列を返す計算フィールドをつくり、インポートするようにして対処したことがあります。

           

          FileMaker が元々 SQL 駆動系の DB システムではないため、出来る事は極力 FileMaker 上で仕込んでおき、ODBC での処理が最小限になるような対処が必要となるケースはままあるようです。

           

          ご参考になれば幸いです。

          • 2. Re: SELECT SQLでの文字列の連結がうまくいかない
            ranja
              

            Yodaさん、こんにちは。

             

            FMS10のデモ版で試してみましたが同じでした。ちなみにSTRVALの代わりにCAST(... AS VARCHAR)を使っても変わりませんでした。

             

            もう一つ次のようなSQLで、

            SELECT A.ID, (SELECT COUNT(*) FROM B WHERE B.ID = A.ID) FROM A

            2番目の列は当然COUNT(*)だから数値かと思いきや、返ってきた値のタイプをみると文字列になっているようです。なにそれ(FMS8の場合)。まあ、変換すれば済むことですが。

             

            ほんとにFMSのSQLはタコですね。これであの価格はないでしょう。(Advancedになると途端に高くなる)

            早めにSQL Serverに移行したいところですがなかなかそうもいかなくて。