SQLの算術演算子使用について

このQ&Aのポイント
  • VB.NETで、dataadapterウイザードでSQL文が自動作成されますが、算術演算子を記述するとエラーになります。
  • 開始時間と終了時間を入力し、所要時間を表示させたい場合、SQLの算術演算子を使用する方法があります。
  • しかし、所要時間の計算式に¥やMODを含めるとエラーになってしまいます。他の方法で数値データを扱うことを検討してください。
回答を見る
  • ベストアンサー

SQLの中での算術演算子使用は?

VB.NETで、dataadapterウイザードでSQL文が 自動作成されますが、この中で¥やMODなどの算術演算子を 記述するとエラーになります。 下記のようなことがしたいのですが、いい方法はないでしょうか? 例  開始時間 a 時 b 分    終了時間 c 時 d 分    a,b,c,d はそれぞれフォームから手入力(string)    所要時間を e 時間 f 分と表示させたい 今SQLで、   ((val(c) - val(a))*60 + (val(d) - val(b))) as 所要分 としており、ここまではエラーなしで動いてくれます。 ただこれに   (上の計算式)¥60として所要時間を   (上の計算式)MOD 60として端数の分を 計算させに行くとエラーになります。 こんな使い方はできない(しない)ものなのでしょうか。 datasetにこれ以外に数値(データ)を持たせる方法があれば ご教示ください。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • O_cyan
  • ベストアンサー率59% (745/1260)
回答No.2

Mod → Math.IEEERemainder \ → Math.DivRem VB.NETならこれで出来ると思うのですが。

danchor
質問者

お礼

Mathクラスなんていうものがあったんですね。 ついついExcelで使い慣れている INT、MOD等ばかり 浮かんできて、また新しいページが開けました。 活用させていただきます。 ありがとうございました。

その他の回答 (1)

  • PrintScree
  • ベストアンサー率25% (538/2091)
回答No.1

使用するデータベースによると思います。 Oracleはダメだけど、SQL Serverは大丈夫とか。 使用しているRDBMSのマニュアルを見てください。

danchor
質問者

補足

ACCESSでテーブルを作り、VB.NETで入力フォーム等を 作って、それをMSDEで動かそうとしています。

関連するQ&A

  • Javascriptで算術演算子を作っているのですがわかりません・・・

    あの、JavaScriptの課題で、算術演算子つくり、加算、減算、乗算、除算、整数の除算の商と余りが求めれるように、a bにそれぞれ数値を代入して計算開始というのを作りました。それで、数値以外のたとえば、アルファベットなどを代入した場合、それは数値ではありません、数値を代入してくださいというような数値の入力を促すようになるようにしたいのですが、エラーばかりでます。どのようにソースを打ったら良いのかさっぱりわかりません。教えてください!!よろしくおねがいします。

  • PowerShellからODBC接続してSQL実行

    PowerShellからORACLEにODBC接続してSQL実行しています。 抜粋となりますが、以下の処理をしていますが、データの取得で エラーが発生し、どうしてもORACLEのDBから抽出できません。 [void][System.Reflection.Assembly]::LoadWithPartialName("System.Data") $connectionString="DSN=xxxxx;uid=xxxxx;pwd=xxxxx;" $conn = New-Object System.Data.Odbc.OdbcConnection($connectionString) $odbcCommand = New-Object System.Data.Odbc.OdbcCommand $odbcCommand.Connection = $conn $sql = "select sysdba from dual" $odbcCommand.CommandText = $sql $dataAdapter = New-Object System.Data.Odbc.OdbcDataAdapter $dataAdapter.SelectCommand = $odbcCommand $dataSet = New-Object System.Data.DataSet $nRecs = $dataAdapter.Fill($dataSet) "1" 個の引数を指定して "Fill" を呼び出し中に例外が発生しました: "算術演算の結果オーバーフローが発生しました。" 発生場所 行:1 文字:27 + $nRecs = $dataAdapter.Fill <<<< ($dataSet) + CategoryInfo : NotSpecified: (:) []、MethodInvocationException + FullyQualifiedErrorId : DotNetMethodException DataSetに格納でエラーとなったので、ExecuteReaderに変えて実行。 上記、処理に $conn.Open() を追加し、 $odbcReader = $odbcCommand.ExecuteReader() "0" 個の引数を指定して "ExecuteReader" を呼び出し中に例外が発生しました: "算術演算の結果オーバーフローが発生しました。" 発生場所 行:1 文字:41 + $odbcReader = $odbcCommand.ExecuteReader <<<< () + CategoryInfo : NotSpecified: (:) []、MethodInvocationException + FullyQualifiedErrorId : DotNetMethodException と、DataSetを使おうが、ExecuteReaderを使おうが同じエラーが発生した。 何が原因で発生しているのでしょうか。 また、対処はどのようにしたらよいのでしょうか。 お願いします。 環境 ・Windows7 64ビット ・64ビット oracle client 11gR2 ・sqlnet.ora、tnsnames.ora を作成 ・odbcデータソース作成  TNSサービス名には、tnsnames.ora にあるサービス名を指定

  • 表どうしで演算するSQLについて

    SQLについて質問です。 コードと値(数値型)で構成されている表が3つある(A、B、C)とします。 そして、下記のようにコードをキーに値の演算をしたいと 思っています。 select A.値 - B.値 + C.値 as z from・・ この時にコードがない時(たとえばAにB,Cと同じコードない時)は、A.値(=0)+B.値(=3)+C.値(=7)のように0をセットして、要は3つのの表の最大レコード数分の演算値を取得したいのですが、どのようにSQLを記述すれば良いでしょうか?

  • SQL

    SQLの初心者です。 次のようなテーブルがあるとします。 項目:A , B , C , D このテーブル合計を求めたいのです。 条件は、 同一テーブルでB=10の時のAの合計とD=10の時のCの合計の合計です。 B=10の時のAの合計は「sql sum(A) from テーブル where B=10」となります。 D=10の時のCの合計は「sql sum(C) from テーブル where D=10」となります。 この2つの合計を求めたいのです。 宜しくお願いします。

    • ベストアンサー
    • MySQL
  • プログラムの算術演算で教えて下さい。

    お世話になっております。 とある試験問題のアセンブラ言語について、算術演算が理解できず困っておりますので投稿させて頂きました。 この問題を解決できないと、先に進めない状態となっており、困っております。 【前提】 実機を使用してアセンブルしながら値の確認を行っているのですが、下記の問題において、アドレス8008でGR2の値が下記の様に表示されています。 【GR2】 アドレス:#8012 算術:-32750 論理:32786 1000 0000 0001 0010 また、問題集の解説には下記の様に記載されています(一部抜粋)。 「1回目のGR2は#8012、GR3は#8016です。CPA命令は算術10進数で比較しますから、変換するとGR2が-32750、GR3が-32746です。GR2やGR3に設定したのはラベルのアドレスでしたね。」 【ご質問】 GR2の値が、なぜ「-32750」になるのか?を教えて下さい。 また、これは"8012を指しているのでしょうか?それとも内容の「20」を指しているのでしょうか? 今、私が理解できるのは、 ・実機検証画面の2進数「1000 0000 0001 0010」は、16進数の「8012」を示している ・アドレス8008行によって#8011番地にONEが加算、つまり#8011+1=#8012番地を対象とする ところまでは理解できるのですが、その先どう計算したら良いのかがわかりません。 現在数百ページある書籍の内70ページ程を読み進めたところですが、全体的に算術演算がよく理解できていない様に感じてはいます。 が、書籍を読んでもいまいち理解が難しいため、お伺いします。 【書籍内問題】 (1)下記プログラムを実行した結果、ANS番地に格納される値を10進数で答えなさい。 (2)下記プログラムは誤りがあります。誤っている箇所を修正しなさい。 ■アセンブルリスト  ※-------------------------------- ご覧のブラウザ環境によってスペース等の表示が変わる可能性がありますので、 区切りで「/」を入れております。 見やすくしただけで、問題自体に「/」はございません。 ※-------------------------------- ADDR: メモリ内容  /プログラム  : /REI7004 / START 8000: 1210/0000 /LAD /GR1,0 8002: 1220/8011 /LAD /GR2,DATA 8004: 1230/8016 /LAD /GR3,ENDDATA 8006: 2012/0000 /LOOP /ADDA /GR1,0,GR2 8008: 2020/8010 /ADDA /GR2,ONE 800A: 4423/ /CPA /GR2,GR3 800B: 6100/8006 /JMI /LOOP 800D: 1110/8016 /ST /GR1,ANS 800F: 8100/ /RET 8010: 0001/ ONE /DC /1 8011: 000A/ DATA /DC /10 8012: 0014/ DC /20 8013: 001E/ DC /30 8014: 0028/ DC /40 8015: 0032/ DC /50 8016: ENDDATA /DS /0 8016: 7FFF/ ANS /DS /1 : END 以上となります。 ド素人の質問で申し訳ありませんが、ご回答頂ける方がいましたらよろしくお願いします。

  • いろいろな処理をさせてSQL文を効率的に作りたい

    $_REQUEST['getA']、$_REQUEST['getB']、$_REQUEST['getC'] ・・・ とあり、 これらをMYSQLのSQL文に効率的に組み込んでいきたいです。 mysqlのデータと$_REQUESTのキー名と対応させた$lllを foreachでそれぞれをswitchで処理を分けて、 $qqqのSQL文に組み込んでいるつもりです。 よろしくお願いします。 $lll = array( "getA"=>"mysql_colum_name_A", "getB"=>"mysql_colum_name_B", "getC"=>"mysql_colum_name_C", "getD"=>"mysql_colum_name_D", "getE"=>"mysql_colum_name_E" ); foreach($lll as $key=>$val){ if(!isset($_REQUEST[$key]) or $_REQUEST[$key]==='') continue; switch($key){ case "getA": $ga = explode("+", $_REQUEST[$key]); $val_A = $val; break; case "getB": $gb = $_REQUEST[$key]; $val_B = $val; break; case "getC": $gc = $_REQUEST[$key]; $val_C = $val; break; case "getD": $gd = $_REQUEST[$key]; $val_D = $val; break; ~ 他のcaseが続く ~ } } $qqq =<<<__SSS__ SELECT * FROM table WHERE 1 AND ga0 <= val_A AND val_A < ga1 AND `colum_B` BETWEEN CURDATE() - INTERVAL gb YEAR AND CURDATE() - INTERVAL 1 DAY AND gc <= val_C AND gd <= val_D AND val_E IN(ge) ORDER BY field deskORasc LIMIT L1,L2; __SSS__; $sss = $ddd->prepare($qqq); $sss->execute(array( ':ga0'=>$ga[0], ':ga1'=>$ga[1], ':val_A'=>$val_A, ':gb'=>$gb, ':val_B'=>$val_B, ':gc'=>$gc, ':val_C'=>$val_C, ':gd'=>$gd, ':val_D'=>$val_D, ':ge'=>$ge, ':val_E'=>$val_E, ~いろいろなものが続く~ ':field'=>$field, ':deskORasc'=>$deskORasc, ':L1'=>0, ':L2'=>50 )); $rrr = $sss->fetchAll(PDO::FETCH_ASSOC);

    • ベストアンサー
    • PHP
  • SQL文がわかりません。

    SQL文がわからなく困っております。 下記のデータ*01を*02のデータのようにSELECTするためには、 どのようなSQL文を書けばよいのかお教えいただけますでしょうか? DBはoracle11gです。 ※01 ID      所属部署 _____________________________    1     a    1     b     2     a    2     b    2     c    3     a    3     b    3     c    3     d ____________________________ ↓↓↓↓↓↓↓↓↓↓↓↓↓↓ ※02  ID   所属部署    所属部署2   所属部署3   所属部署4 _________________________________________   1         a         b 2         a         b         c 3         a         b         c         d

  • SQL

    以下のようなテーブルがあり、 区分に2、3、4があれば抽出しないという SQL文を教えていただければと思います。 (SQLSERVER2000を使用しています) 名称    | 区分 テストa |  1 テストa |  1  テストa |  2 テストb |  1 テストb |  1 テストc |  1 テストc |  2 テストc |  3 テストc |  4 テストc |  5 テストd |  1 テストd |  1 テストd |  5 テストd |  5 テストd |  5 例でいくとテストaは区分が1、1、2で 2がはいっているので抽出しない。 テストbは1、1なので抽出する。 テストcは1、2、3、4、5で2、3、4がはいっている ので抽出しない。 テストdは1、1、5、5、5なので抽出する。 つまり結果としては テストaとテストdが抽出されるということです。 質問もままならないほどSQL初心者のため、 どうかご回答いただきたいと思います。 よろしくお願いします!!

  • グループ化のSQL文について

    このジャンルでお願いします。 tbl id  starttime endtime val 1     0      40  3 2     160    170  1 3     160    190  2 starttimeとendtimeは「分(160なら60×2+40で2時40分になります)」で保存してます。 このようなテーブルで、時間毎にvalの平均を出したいのですが、 id  hour avg(val) 1    0   3  ← 0~1時まで 2    1   0  ← 1~2時まで 3    2   1.5  ← 2~3時まで 4    3   2  ← 3~4時まで ・ ・ 24   23   0  ← 23~24時まで といった感じで24区間に分けてその区間毎のvalの平均を出したいです。 これはどのようなSQL文になるのでしょうか? またこのようなSQL文で1度に取得するやり方と、 いったん全行取得してPHPなどでループして平均を計算するやり方とでは レコード数が増えてきた場合にどちらが速いとかはあるのでしょうか?

    • ベストアンサー
    • MySQL
  • エクセル 時間の計算

      A(距離) B(速さ)  C(所要時間) D(時間) 1 3.9    5     0:46     13:52? 2 14.7    5     2:56     16:49? 3 0.9     5     0:10     17:00 まず、C1の「所要時間」を出すのに、 「3.9/5/24」の計算で「h:mm」表示にし、0:46としました。 これを1分繰り上げて(「h:mm:ss」だと0:46:48になるので)0:47と 表示させるには、どうしたら良いですか? C3も同じく0:11の表示にしたいです。 そうやってCの「所要時間」を全て出した後、今度はD3の17:00から 逆算してD1のスタート時間を算出するにはどうしたら良いですか? 単純なD3ーC3の引き算だと、計算が合わなくなります。 意味わかって頂けたでしょうか。。 宜しくお願いします。