SQLで調査日付がどの年度の日付なのかを取得する方法

このQ&Aのポイント
  • データベースには、id, nendo, sdate, edateというカラムがあります。2014/03/31という日付がどの年度の日付なのかを調べるために、以下のSQLを使用します: SELECT * FROM m_nendo WHERE sdate <= '2014/03/31' and edate >'2014/03/31' しかし、現在の書き方では意図した結果を取得できない状況です。
  • 2014/03/31という日付がどの年度の日付なのかを調べるためのSQLを作成したいです。データベースにはid, nendo, sdate, edateの4つのカラムがあります。以下のSQLを使用することで、目的の結果を取得できます: SELECT * FROM m_nendo WHERE sdate <= '2014/03/31' and edate > '2014/03/31' しかし、現在の書き方では思った結果を得ることができません。
  • 日付データベースには、id、nendo、sdate、edateというカラムがあります。2014/03/31という日付がどの年度の日付なのかを調べるために、以下のSQLを使用します: SELECT * FROM m_nendo WHERE sdate <= '2014/03/31' and edate > '2014/03/31' しかし、現在の書き方では予期した結果を取得できません。辞書を参照しても、適切な検索キーワードを見つけることができませんでした。この問題に取り組んだことがある方、アドバイスをいただけませんか?
回答を見る
  • ベストアンサー

SQLを教えてください。

おせわになります。助けてください。 id | nendo | sdate | edate 0 | 2012 | 2012-04-01 | 2013-03-31 1 | 2013 | 2013-04-01 | 2014-03-31 2 | 2014 | 2014-04-01 | 2015-03-31 2 | 2015 | 2015-04-01 | 2016-03-31 といったデーターベースがあります。 2014/03/31 という日付がどの年度の日付なのかを 調べるSQLをどう書けばいいのかわかりません。 SELECT * FROM m_nendo WHERE sdate <= '2014/03/31' and edate >'2014/03/31' といった書き方をしているのですが、思う結果を取れません。 ネットでどういう言葉で検索したらいいのかも・・・わかりません。 書き方をご存知の方、教えて頂けませんか? よろしくお願いします。

  • MySQL
  • 回答数2
  • ありがとう数12

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

  • ベストアンサー
  • maiko0318
  • ベストアンサー率21% (1483/6970)
回答No.1

SELECT * FROM m_nendo WHERE sdate <= '2014/03/31' and edate >'2014/03/31' ではなくて SELECT * FROM m_nendo WHERE sdate <= '2014/03/31' and edate >='2014/03/31' ですね

123daa
質問者

お礼

ありがとうございました。 '2014-03-31'と'2014/04/31'は別物なのですね。 スラッシュをハイフンに変えたらうまくいきました。 ありがとうございました。

その他の回答 (1)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

まぁ普通日付の範囲を検索するときはbetweenですけどね SELECT * FROM m_nendo WHERE '2014/03/31' between sdate and edate

123daa
質問者

お礼

ありがとうございました。

関連するQ&A

  • postgreSQLで分からないことがあります。

    postgreSQLで分からないことがあります。 よろしくお願いします。 下にあるtblというテーブルがあったとき。 下のSQLを実行するとデータがうまく取れているんですが、 CURRENT_DATEは日付型でSUBSTRでとりだした日付は文字列 なのに何故正しく比較できているのでしょうか? 日付型の形式の文字列であれば、RDBMSがかってに日付型にしてくれるのでしょうか? tblテーブル *sdateとedateはtimestamp型です。 sdate      | edate | ----------------------------------------- 2010-5-1 10:00:00 | 2010-5-2 13:00:00| SELECT * FROM tbl WHERE CURRENT_DATE BETWEEN SUBSTR(sdate, 1, 10) AND SUBSTR(edate, 1, 10)

  • SQLインジェクションの対策

    SQLインジェクションの対策 いつもお世話になっております。 SQLインジェクションの対策についてお伺いいたします。 もともと↓のようなSQL文だったものを "select user_id from table where user_id='{$user_id}'" 以下のように変更しました。 "select user_id from table where user_id='" . mysql_real_escape_string($user_id) . "'" 以下のように実行されていたSQL文は select user_idfrom table where user_id='10001' and 'a'='a' ↓のようにエスケープ処理して実行されるようになりました。(入力値は「10001' and 'a'='a」) select user_id from table where user_id='10001\' and \'a\'=\'a' ですが、phpMyAdminで実行してみるとどちらのSQL文も同じ結果が取得できてしまいます。 これでは対策になっていないと思ったので、質問させていただきました。 (magic_quotes_gpcはoffに設定しています。) なにか他の方法がいいのでしょうか。 ご教示よろしくお願いいたします。 <環境> PHP 5.1.6 MySQL 5.0.45

    • ベストアンサー
    • PHP
  • SQL文について困っています

    ID(NUMBER型)と NUM(NUMBER型)と nenngetu (date型)を持ったテーブルAAAから、 ID=1000 のなかで日時が一番古い処理NOをselectするSQL文を書きましたが上手く実行されません。 select NUM from AAA where nenngetu = (select min(nenngetu) from AAA) and ID=1000; ID=1000の条件をはぶき、 select NUM from AAA where nenngetu = (select min(nenngetu) from AAA); でしたら、実行できました。 oracleで実行しようとしています。 どなたか、書き方を教えてください。

  • SQLの構文で質問です。

    いつもお世話になっております。 SQLの構文で質問です。 テーブルを開いて、データの中から日付を絞って抽出したいのですが、 whereの後にどのような記述をすればいいのかわかりません。 なんとなく『>』を使ってやってみましたがうまく抽出できませんでした。 例えば、2008/12/01~2008/12/31の絞りで抽出できるようにしたいのですが。 SELECT * FROM 日付 WHERE (日付   2008 / 12 / 01    2008 / 12 / 31) すみません、SQLを使い始めて間もなく本を見てはいるのですがうまくいかないもので。 宜しくお願いします。

  • SQL文について質問させて頂きます。

    いつもお世話になっております。いろいろSQL文の本を読んだのですがわからないので今回もよろしく お願い致します。 SELECT DISTINCT * FROM bukken WHERE (id IN (SELECT fid FROM fudou_kodawari WHERE kid IN (1,4))) というSQL文があるのですが、これだと1,4が1つでも含まれるリストが出てくるのですが1,4が完全に一致しないと出てこないようにするにはどのようにSQL文を変更すれば良いのでしょうか? 何卒よろしくお願い致します。

  • 一定以上の行があれば最大値を持つ行を削除するSQL

    MySQL5にて、あるテーブルの特定フィールドの数(つまりcount値)が一定値以上であれば、間引きのため別のフィールドの値で最大値をもつ行を削除するSQLを考案中です。 イメージとしては以下の通りですが、SQLとしては誤っており、また、冗長です。 DELETE FROM table WHERE id={$id} AND (SELECT COUNT(*) FROM table WHERE id={$id}) > 5 AND begin = (SELECT MAX(begin) FROM table WHERE id={$id}); よい知恵をお授けください。

    • ベストアンサー
    • MySQL
  • SQL Serverでデータの表示順を決める方法

    SQL Serverのデータベースなのですが、 日付順に変えたいのです SDate(日付)というタブとSTime(時間)というタブがあるので、古い順にしたいのですがどうすればよいでしょうか? SDateには"20051001"みたいな感じで、STimeには、"1715"みたいな感じで入っています。 できれば、実行したら日付順になるのではなく、 Select文などでいつ呼び出しても日付順に出力されるようにしたいのです。 もし、無理だったら、日付順に変更する方法を教えてくださいー

  • SQLについて

    SQLについて質問です。 現在vbからmdbファイルにある日付間のデータを取得するようなsqlをなげているのですがうまくいかないのでお知恵をお貸しください、、、 sql文は ("select * from ABC where date between ""'" & hiniti & "'"" and ""'" & hiniti2 & "'"" ;") hinitiには日付(2006/4/5)hiniti2には(2006/7/4)のように日付が入ったとするとデータは2006/4/5以降から2006/7/4までしか取得してこないのです。 BETWEEN 演算子は境界値も含むらしいので2006/4/5のデータが取れない理由がわかりません。 日付が文字列というのが問題あるのでしょうか?

  • SQL文で困っています。

    ID(NUMBER型)と NUM(NUMBER型)と nenngetu (date型)を持ったテーブルAAAから、 ID=1000 のなかで日時が一番古い処理NOをselectするSQL文を書きましたが上手く実行されません。 select NUM from AAA where nenngetu = (select min(年月) from D_KR_SAP_IFRIREKIKANRI) and ID=1000; ID=1000の条件をはぶき、 select NUM from AAA where nenngetu = (select min(年月) from D_KR_SAP_IFRIREKIKANRI); でしたら、実行できました。 oracleで実行しようとしています。 どなたか、書き方を教えてください。

  • SQLについて

    こんにちは、honiyonです。  良い質問タイトルが思いつきませんでした...(^^;  2つのテーブルがあります。(仮定です)   ・オーナーの情報テーブル(owner)   ・オーナーの車の情報テーブル(car)  この2つのテーブルを利用して「男性の人で、黒い車に乗ってる人の車種名」を検索しようとしました。  これを1つのSQLで   SELECT car.name FROM owner,car WHERE (owner.no=car.ownerno) and (car.color='black') and (owner.sex='MAN');  とか、   SELECT car.name FROM (SELECT * FROM owner WHERE (owner.sex='MAN')) AS O2, (SELECT * FROM car WHERE (car.color='black')) AS C2 WHERE (owner.no=car.ownerno);  とかやってみましたが、涙が出るほど遅いです。  しかし   SELECT * INTO TABLE owner_tmp FROM (SELECT * FROM owner WHERE owner.sex='MAN'); SELECT * INTO TABLE car_tmp FROM (SELECT * FROM car WHERE car.color='black'); SELECT car_tmp.name FROM (owner_tmp.no=car_tmp.ownerno);  とすると超高速です。  なんとかテンポラリを作らず、出来れば1つのSQL文で高速に冒頭の処理を行いたいのですが、良い方法はないでしょうか。 是非お知恵を貸してください。  宜しくお願いします(.. #データベースはPostgreSQL 7.2.3です。