- ベストアンサー
文字列の足し算
お世話になっております。 例えば変数で a = 10 b = "10" c = 20 d = "20" とあったとします。 そこで、 a + b = 20 a + c = 30 b + d = 1020 文字列同士を足すと文字を連結させてしまいます。 当たり前ですが・・・・ そこで、この文字列(b + d)の結果を30に出来ないでしょうか? よろしくお願い致します
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
再び#1~4の者です。 先ほどの回答のエラーメッセージに間違いがありました。 【誤】 サーバー : メッセージ 409、レベル 16、状態 2、行 1 sum or average aggregate 演算は、void type データ型の引数を取りません。 サーバー : メッセージ 243、レベル 16、状態 1、行 1 型 bicint はシステム型として定義されていません。 【正】 サーバー : メッセージ 243、レベル 16、状態 1、行 1 型 bicint はシステム型として定義されていません。 です。 それはともかく、ふと思ったのですが、SQL-Serverのバージョンは何でしょうか? bigint型は、確か、SQL-Server2000からサポートされたデータ型ですので、もしそれ以前のバージョンでしたらエラーになると思います。 もしそうだとしたら、numeric型に変換してみてはどうでしょうか?
その他の回答 (4)
- mfuku
- ベストアンサー率50% (173/345)
やりたいことはわかりました。 SQL上で合計処理した方が効率的ですね。 おそらく、単純なタイプミスじゃないでしょうか? select CONVERT(bigint, '1234567890123456') は、正しく実行されます。 しかし、例えば、 select CONVERT(bicint, '1234567890123456') というようにタイプミスした場合(「bigint」→「bicint」)、下記のようなエラーになります。 サーバー : メッセージ 409、レベル 16、状態 2、行 1 sum or average aggregate 演算は、void type データ型の引数を取りません。 サーバー : メッセージ 243、レベル 16、状態 1、行 1 型 bicint はシステム型として定義されていません。 もう一度よく確かめてみてください(できればクエリアナライザ上で試してみてください)。 ちなみに、下記のような構文(合計)でもOKです。 select SUM(CONVERT(bigint, '1234567890123456')) select SUM(CONVERT(bigint, field)) from TABLENAME
お礼
mfuku様。 しかし、残念ながらbigintは使えませんでした。 (smallintは使えました。値が小さい時のみ) といことなので、CCurを使いデータを引き出すループの中で if IsNull(objRS("field").value) = False then sum = sum + CCur(objRS("field").value) end if ・ ・ ・ とすることにします。 少し重そうですが。。。 なぜbigintが使えないのかは不明なままですが、 本当にありがとう御座いました。
- mfuku
- ベストアンサー率50% (173/345)
更なる質問の意味がいまいちわかりませんが、こんな解釈でよろしいでしょうか? ASP上ではなく、SQL-ServerのSQLのレベルで文字型をbigint型の値に変換するSQL構文を知りたい。 そうだとすると、以下のような形になります。 CONVERT(bigint, field) 試しに以下のSQL文をクエリアナライザで実行してみてください。 select CONVERT(bigint, '1234567890123456') 数値型に変換されたかと思います。
補足
回答ありがとう御座います。 そして、質問の意味がわかりにくくてすみません。 結果としては 「型 bigint はシステム型として定義されていません。」 とエラーがでるのです。 もう一度やりたいことを書かせていただきます。 SQL-SERVER上でもasp上でもどちらでもいいのですが、 文字列のフィールドにある数値の値の合計を出したいのです。 そこで、まず私がやろうと思ったのは、 上記に書かれてますように CONVERT(int, field) → 数値がある一定の値を超えるとオーバーフローする。 CONVERT(bigint, field) → 何故か上記のようなエラー となってしまい出来ませんでした。 そして次に考えたのが一度asp側で値を受け取り、受け取った値を数値に変換して足そうと思ったのです。 これをやろうとすると恐らく重くなりそうな予感がするので、SQLのconvertのようなのを使って select sum(convert(field))・・・とやりたいのですが、出来ないでしょうか? bigintが使えないのは何故か分からないのですが、何か環境が悪いのでしょうか? すみませんが、宜しくお願いします。
- mfuku
- ベストアンサー率50% (173/345)
CCur(b) + CCur(d) と、数値型(通貨型じゃなくてもOK)に型変換すれば大丈夫です。
補足
回答ありがとう御座います。 私が質問した内容はCCurで出来ました。 そこで、本当にやろうとしていることはDBの文字列のフィールドに数値が入っており、 dim sum sum = 0 Do Until objRS.EOF sum = sum + CCur(objRS("field").value) ・ ・ ・ として、文字列型のフィールドに入っている数値の合計を出したいのです。 SQLサーバーと連携しておりconvert(..)として、int形に変換すると intの最大数を超える桁数の文字列がありそこでエラーがでます。 bigintなども使おうと思ったのですが、何故か使えません。 何か良い方法はあるでしょうか? 宜しくお願い致します。
なぜ数字を計算させるものなのに文字列になっているのでしょうか? 変数の定義が間違ってるということはないですか?
補足
回答ありがとう御座います。 DBに文字列で登録されているデータの合計値を取得したいのです。 フィールドをintに変えれば一番早いのですが、 事情があり変えれません。 その結果このような現象が起こっております。
お礼
バージョンなのですが、7.0を使っておりました。 ご指摘のとおり、numeric型に変換することにより出来ました。 本当にありがとう御座いました