none
Microsoft.ACE.OLEDB.12.0プロバイダーを使って Excel からデータを読み込むSQLについて RRS feed

  • 質問

  • ASP.NETで開発しています。

    Microsoft.ACE.OLEDB.12.0プロバイダーを使って Excel からデータを読み込む処理を実装しています。

    Excel からデータを読み込むSQLで指定した項目のデータを数値として変換してソートしたいと思っているのですが、

    下記の変更後のSQLを実行したところ「式に未定義関数  'to_number' があります。」とのエラーになります。

    色々と調べてFormat関数が使えるのではと試してみましたが期待通りにソートされませんでした。

    以下が試したSQL文です。

    【変更前】SELECT 管理番号 FROM [TABLE$] WHERE ORDER BY 管理番号
     
    【変更後】SELECT to_number(管理番号) FROM [TABLE$] WHERE ORDER BY 管理番号

    【Format関数】SELECT Format(管理番号,'0') FROM [TABLE$] WHERE ORDER BY 管理番号

    実現方法のご教授をお願いします。

    2012年1月26日 23:40

回答

  • order byによってソートされます。【変更前】、【変更後】、【Format関数】の3つとも「ORDER BY 管理番号」なので、3つともソート順は変わりません。変わるのはselectされて表示される管理番号の部分のみです。
    試していませんが、 Format(管理番号,'0')が期待通りに表示されているのであれば、order by Format(管理番号,'0') としてみて下さい。

     


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/
    • 回答としてマーク yukimai 2012年1月27日 1:14
    2012年1月27日 0:45
    モデレータ

すべての返信

  • order byによってソートされます。【変更前】、【変更後】、【Format関数】の3つとも「ORDER BY 管理番号」なので、3つともソート順は変わりません。変わるのはselectされて表示される管理番号の部分のみです。
    試していませんが、 Format(管理番号,'0')が期待通りに表示されているのであれば、order by Format(管理番号,'0') としてみて下さい。

     


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/
    • 回答としてマーク yukimai 2012年1月27日 1:14
    2012年1月27日 0:45
    モデレータ
  • 私も試してませんけど、Format は文字列化だと思うので、order by Format(管理番号,'00000') のように管理番号の最大桁に整える方がいいと思いました。

    以下のサイトに一覧されている関数が使えそうに思うので、数値としてソートされたいのでしたら、order by val(管理番号) でもいいのかもと思いました。

    Access 2000 および Access 2002 で、安全でない関数が実行されないように Jet 4.0 を構成する方法
    http://support.microsoft.com/kb/239482/JA

    2012年1月27日 0:58
  • trapemiya様

    ご指摘通りorder byに記述したところ期待通りの結果が得られました。

    ありがとうございました。

    2012年1月27日 1:15
  • 文字列型の数値をソートする場合、文字列長を比較の対象に加える方法もあります。ただし、その項目は数値のみで構成されており、0パディング等されていない単純な数字のみで構成されているとします。

    order by len(管理番号), 管理番号

     


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/
    2012年1月27日 1:17
    モデレータ