- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:DATEADD 関数の引数の省略形の書き方)
DATEADD関数の引数の省略形について
このQ&Aのポイント
- SQL Server+SQL クエリアナライザ上で実行するSQLのスクリプトを書いていて、DATEADD 関数の書き方で困りました。
- DATEADD関数を使って現在の日時から1ヶ月後を表示する方法について、引数の省略形である「mm」と「m」の使い方に違いがありました。
- 開発環境では引数をダブルクォートで囲む方法も問題なく実行できましたが、運用環境のSQLクエリアナライザではエラーとなりました。原因は特定できず、他の環境でも同様の事象が発生する可能性があるため、注意が必要です。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
SQL Serverでは ・テーブルや列名などは「識別子」 ・文字列や数字などは「リテラル」 と呼ばれています。 それぞれを区別するために通常は、 識別子はそのまま表記し リテラルにシングルクォーテションで括って表記します dateaddのdは識別子なのでそのままでの表記になります しかしSQL-92(国際規格)では識別子をダブルクォーテーションで括る表記を認めているため SQL ServerではSQL-92の表記をサポートするためのオプションが存在します SET QUOTED_IDENTIFIER OFF select dateadd("d",1,getdate()) --エラーになります select "ABC" as col1 --正常に動作します SET QUOTED_IDENTIFIER ON select dateadd("d",1,getdate()) --正常に動作します select "ABC" as col1 --エラーになります クエリアナライザでは規定値でOFFの状態となっています 変更は[ツール]-[オプション]-[スクリプト]や上記のSETコマンドを使用することで可能です 一方Accessなどではリテラルをダブルクォーテーションで括る事があるので ツールの方から自動的に上記のコマンドが暗黙的に実行されOFFになっているようです SQL Server2000で確認しましたが、多分Ver7でも同じだと思います 詳しくはクエリアナライザのヘルプで「SET QUOTED_IDENTIFIER」を参照してください
お礼
詳しい説明ありがとうございます。 運用環境の設定を調べないことには確定しませんが、多分これであたりでしょう。 しかし、開発環境と運用環境で設定が違うという地雷のような状態の可能性があるわけですね(現に今回踏んじゃったわけで)…管理者に相談だぁ。
補足
ありがとうございました。審査通りました。