- 締切済み
SQLSeverでのSQL文について
こんにちは。質問させてください。 今、PHPでSQLSeverのデータを取得しようと考えています。 テーブル(test_tbl)はname(varchar型)、hizuke(datetime型)の2列で 構成されていて 12月のデータを取得したいと考えています。 select name, hizuke from test_tbl where datename(month,hizuke) = '12'; と上記のようにしたいのですが、SQLSeverのクエリーアナライザーでは 正常にデータを取得できましたが、PHPのソースで記述したほうは 検索データを1件も取得することができませんでした。 今度はwhere句以降のdatename関数部分を datename(month, hizuke) = 'December'と記述すると PHPでの方は正常に複数行取得することができます。 datename(year, hiduke) ->'2002', datename(day, hiduke) ->'26'なのに、 なぜ datename(month, hizuke) は'12'でなくて 'December'になってしまうのでしょうか? CONVERTなど色々と他の関数はありますが、 datename関数を使用したいと考えています。 どうぞ、宜しくお願いいたします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- harumimi
- ベストアンサー率46% (51/109)
再びです。 >それぞれ01. 02. ... 09なので。 >どうしましょ? 難しいことはわかりませんが、多分 1.where datename(month,hizuke) = '01' 2.where datename(month,hizuke) = 01 3.where datename(month,hizuke) = 1 どのパターンでもデータを拾ってくると思うんですが... やってみてください。(^_^;)
- harumimi
- ベストアンサー率46% (51/109)
この質問の場合、DATEPART関数を使用しないと取れないのでは? 以下、SQLSever Books Onlineより -------- DATEPART 関数と DATENAME 関数の比較 DATEPART 関数および DATENAME 関数は、年、4 半期、日、時間など、datetime 値の指定された部分を整数または ASCII 文字列として作成します。smalldatetime は、分単位までしか正確でないため、これらの関数で smalldatetime 値を使った場合、返される秒およびミリ秒は常に 0 になります。 次の例では、日付は 5 月 29 日と仮定しています。 SELECT DATEPART(month, GETDATE()) 以下に結果セットを示します。 ------------ 5 (1 row(s) affected) SELECT DATENAME(month, GETDATE()) 以下に結果セットを示します。 ------------ May (1 row(s) affected)
お礼
早速の返信ありがとうございました。 私もマニュアルをいまみたのですが、 『おっ!!datapartでいけるかも』っておもったのですが、 datepartの戻り値がintなのでcharにCASTすると 10~12月は問題ないとおもわれますが、 1月~9月の一桁だと問題になります。 DBに格納されているデータの月が一桁なのは それぞれ01. 02. ... 09なので。 どうしましょ?