SQL構文に関する質問です。データ型が整数や実数の場合には、insert 文などで、values(5,'name') などのように ' を省くことができます。逆に省かないで、つけることもしてよいのでしょうか?

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2008/05/15 21:31:44
  • 終了:2008/05/22 21:35:02

回答(2件)

id:chuken_kenkou No.1

chuken_kenkou回答回数722ベストアンサー獲得回数542008/05/15 21:47:38

ポイント35pt

数値定数を「'」(単一引用符)で囲んでも、数値として扱ってくれるかどうかは、RDBMSによる仕様差

あります。

RDBMSによっては、データ型が不一致としてエラーになるものもあります。

一方で、数値に自動的に変換してくれるRDBMSもあります。

自動変換してくれるのは、一見、楽に思えるかも知れませんが、その分、オーバーヘッドになりますから、

多量のデータを扱う場合は、見逃せない点です。

より性能を出したいなら、データ型の変換が起きない記述を心掛ける必要があります。



http://q.hatena.ne.jp/だみー

id:isogaya

とりあえず、mysql はどうでしょうか? バージョンは、

3,4,5 といろいろつかっています。このあたりの横断的な情報みれるところがありましたらお願いします。

2008/05/16 13:13:41
id:chuken_kenkou No.2

chuken_kenkou回答回数722ベストアンサー獲得回数542008/05/16 17:21:55

ポイント35pt

この辺の仕様は、少なくともMySQL 4.0~5.1では変更はないと思います。


(1)数値定数の指定方法

MySQL :: MySQL 5.1 リファレンスマニュアル :: 8.1.2 数値

数値定数は、

1

10.0

など、「'」(単一引用符)で囲まない。

文字定数は、

'abc'

など、「'」(単一引用符)で囲むといったことの説明があります。


(2)キャストの説明

MySQL :: MySQL 5.1 リファレンスマニュアル :: 11.8 キャスト関数と演算子

MySQLでは、

select 1+'1'

のように「'」(単一引用符)で囲んでも、数値として扱うことが説明されています。

しかし、キャストを自動的にやってしまう訳ですから、オーバーヘッドにはなります。

  • id:taknt
    文字型と数値の違いじゃないのか?
  • id:table
    takntさんに同意します。

    さらに言うなら、DBと実行環境も挙げられたほうがより正しい回答が得られると思います。
    SQL構文て言っても方言がいっぱいありますし。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません