人に聞けない痔の悩み、これでスッキリ >>

はじめまして
皆様の知恵を貸してください
mysqlでの質問なのですが、
簡潔にいうと日付が比較できません。
どういうことをしたいのかというとsqlからwhere文で今の日付より大きいもデータを抽出するということです

データベースの構造は

id int型
endtime datetime型
で構成されています
endtimeには既にいくつかのdatetime型の値が入っています
例えば 2012-12-14 09:18:00
のように入っています

でGETDATE()関数を使って今現在の時刻より未来のものだけ抽出するために
convert関数を使って一度varchar型に変換することで比較しようとしました

色々インターネットで調べた結果次のような文なのではないかと考えました

select id,endtime from [データベース名] where CONVERT(VARCHAR,endtime,121)>=CONVERT(VARCHAR,getdate(),121);

しかし実行ができません
比較する方法を教えて欲しいです

このQ&Aに関連する最新のQ&A

A 回答 (2件)

GETDATE関数、CONVERT関数?


もしかしてお使いのRDBMSはMS SQL Serverでは?
それなら
select id,endtime from [テーブル名] where endtime>=getdate()

MySQLなら
select id,endtime from [テーブル名] where endtime>=now()
    • good
    • 0
この回答へのお礼

丁寧に2つの場合について書いていただきありがとうございました。
今回の場合mysqlだったので上記の文で実行した結果うまくいきました。ありがとうございました

お礼日時:2012/12/05 21:03

endtime >= now()



ではいけないの?
    • good
    • 0
この回答へのお礼

できました!
難しく考えすぎてたようです。
ありがとうございました

お礼日時:2012/12/05 21:02

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QERROR1062:Duplicate entry.....というエラーが出てしまいました

いつもお世話になります。
データベースからSELECTで抽出したデータを別のテーブルにINSERTするSQLを実行したのですが、
ERROR1062:Duplicate entry.....というエラーが出てしまいました。
お詳しい方がいらっしゃいましたら、アドバイスをいただけませんでしょうか?よろしくお願いいたします。
【実行したSQL】
INSERT INTO tblA (dataA1, dataA2, dataA3, dataA4) SELECT "9001","AA",dataB1,dataB2 FROM tblB WHERE dataB1 = 52

tblAの主キー:dataA1とdataA2
tblBの主キー:dataB1

dataA1とdataA2はtblAの主キーとなっているため、重複してしまうということのようです。tblBの主キーはdataB1であるため、抽出されてくるデータは常に1件なので問題ないと期待していましたが、甘くなかったようです。何か良い方法はないものでしょうか?よろしくお願いいたします。

Aベストアンサー

「ERROR 1062」は、重複データを格納しようとした場合に出力されるエラーです。
既にdataA1='9001'&dataA2='AA'という行が、tblAに格納されているのですよね?

>抽出されてくるデータは常に1件なので問題ないと期待していました

「insert ~ select ~」を実行前に、既に同じデータが格納されているのでは?
あるいはprimary keyの指定が、質問中に記された通りでなく、2件以上検索されているかです。

>何か良い方法はないものでしょうか?

何をするための方法を、聞きたいのかが分かりませんが?

Qタイムスタンプ型を抽出条件に指定した場合のSQL

タイムスタンプ型を抽出条件に指定した場合、どの様なSQL文を指定すれば良いでしょうか?
該当するレコードは確かに存在していますが、以下のSQL文では「空」になってしまいました。

【実行したSQL文】
SELECT フィールド
FROM テーブル
WHERE
タムスタンプ型フィールド
BETWEEN
'2011-08-05 20:00:00'
AND
'2011-08-06 19:59:59'

何卒、ご教授頂ければと存じます。
宜しくお願いします。

Aベストアンサー

一応、 MySQL のタイムスタンプ型について回答します。

TIMESTAMP 型の使用は止められるならやめた方が良いと思います。理由は下を参照。

>TIMESTAMP データタイプは、MySQLのバージョンと、そのサーバーが稼動しているSQLモードによって様々な性質を持っています。これらの性質は、このセクションの後のほうで説明します。

>例えば、TIMESTAMP 値は 1970 以前や、2037 以降にはなり得ないという事です。
http://dev.mysql.com/doc/refman/5.1/ja/datetime.html

閑話休題

>expr BETWEEN min AND max

>BETWEEN を日付値または時刻値と使用する場合に最善の結果を得るには、値を所望のデータ タイプに明示的に変換するため、CAST() を使用します。
http://dev.mysql.com/doc/refman/5.1/ja/comparison-operators.html

>convert(expr, type)
>cast(expr as type)
http://dev.mysql.com/doc/refman/5.1-olh/ja/cast-functions.html

以上のことから Cast() または Convert() を使用します。

select フィールド from テーブル
where cast(タイムスタンプ型フィールド as DATETIME) BETWEEN '2011-08-05 20:00:00' AND '2011-08-06 19:59:59'

たぶん、上のような感じでうまくいくと思います。(試していません)
ご参考いただければ幸いです。

一応、 MySQL のタイムスタンプ型について回答します。

TIMESTAMP 型の使用は止められるならやめた方が良いと思います。理由は下を参照。

>TIMESTAMP データタイプは、MySQLのバージョンと、そのサーバーが稼動しているSQLモードによって様々な性質を持っています。これらの性質は、このセクションの後のほうで説明します。

>例えば、TIMESTAMP 値は 1970 以前や、2037 以降にはなり得ないという事です。
http://dev.mysql.com/doc/refman/5.1/ja/datetime.html

閑話休題

>expr BETWEEN min AND max

>BET...続きを読む

Qテーブルの最後(最新)のレコードを抽出したい

宜しくお願いします。
PHP MYSQL の組み合わせで使っています

以下のようにして、最後のレコードを取り出したいのですが
まったく違う事をしているのかもしれません。

$sql =" select * from テーブル where フィールド='max' " ;

フィールドはauto_incrementで番号を振っています。
これで最大のつもりなのですが・・・。

他にも、レコードを入れた時間も記録したフィールドがあるのですが
どうしてよいか?判りません。

テーブルの最新のレコードを出したいのです。
**その中の一つのフィールドを取り出すのですが、
  それはうまくいっているみたいです 
  (max の所に数字を入れると表示します)

お手数かけますが、どなたかご教授お願いいたします。

Aベストアンサー

#2回答者です。

MySQL 4.1以前(サブクエリを使えない)なら、以下のような方法が考えられます。

select * from 表名
order by 列名 desc limit 1

Q日付だけを見てデータをSELECTしたい

お世話になっております。
開発環境:MySQL3.23.58にて、DATETIME型で日付をYYYY-MM-DD hh:mm:ssで登録しています。
そこから、下のように
SELECT * FROM テーブル名 WHERE DATE( フィールド名 ) = '2007-09-12';
などと、日付だけを見てデータを抽出したい(時間は無視したい)のですが、マニュアルを見ると
『DATE() は MySQL 4.1.1 以降で使用できる。』
と書いてあり、やり方が分からず途方にくれております。

上記環境下で、うまく日付のみを見てデータを抽出する術は無いものでしょうか。
アドバイスをいただけたらと思います。
よろしくお願い致します。

Aベストアンサー

型を変換したりするともしインデックスを設定していても無効になるよう
なのでこんな感じでどうでしょう?

SELECT * FROM テーブル名 WHERE フィールド名 BETWEEN '2007-09-12 00:00:00' AND '2007-09-12 23:59:59';

省略するとこんな感じ
SELECT * FROM テーブル名 WHERE フィールド名 BETWEEN '2007-09-12' AND '2007-09-13';

とかでどうでしょう?

QonClickに複数の関数を挿入する方法

初心者なのですがアニメーションの関数anime1、anime2、anime3を作成し、onClickに下記のように設定しました。
クリックするとアニメーション2つの設定ではは動くのですが、3つ目を設定すると動かなくなります。
通常はこのような設定はしないものなのでしょうか?
教えてください。
よろしくお願いします。
<INPUT type="button" value="START" onClick="anime1(), anime2()">・・・OKです。
<INPUT type="button" value="START" onClick="anime1(), anime2(),anime3()">・・・動きません。

Aベストアンサー

セミコロンでつなぐのが常道ですが、3つ以上なら
別途function化したほうが、可読性が高くなると
思います。

QHTMLフォームのSELECTの幅を一定にするためには?

HTMLフォームのSELECTの幅を一定にするためにはどのようにすれば
いいのでしょうか?

CSS等で設定できるとありがたいのですが、やり方がわかりません。

Aベストアンサー

<select style="width: 200px">

QInner join と Left joinの明確な違いは?

Inner join と Left joinの違いがよくわかりません。
教えてください。

Aベストアンサー

出てくる結果が違います。

テーブル1のフィールド1に、






が、

テーブル2のフィールド1に、






が入力されている場合、

SELECT [テーブル1].[フィールド1], [テーブル2].[フィールド1]
FROM テーブル1 LEFT JOIN テーブル2 ON [テーブル1].[フィールド1]=[テーブル2].[フィールド1];
では、結果は、
テーブル1.フィールド1 テーブル2.フィールド1
1               1
2               2
3               3
4               NULL
5               NULL
6               NULL
の6レコードが出力されますが、

SELECT [テーブル1].[フィールド1], [テーブル2].[フィールド1]
FROM テーブル1 INNER JOIN テーブル2 ON [テーブル1].[フィールド1]=[テーブル2].[フィールド1];
では、結果は、
テーブル1.フィールド1 テーブル2.フィールド1
1               1
2               2
3               3
の3レコードしか出力されません。

出てくる結果が違います。

テーブル1のフィールド1に、






が、

テーブル2のフィールド1に、






が入力されている場合、

SELECT [テーブル1].[フィールド1], [テーブル2].[フィールド1]
FROM テーブル1 LEFT JOIN テーブル2 ON [テーブル1].[フィールド1]=[テーブル2].[フィールド1];
では、結果は、
テーブル1.フィールド1 テーブル2.フィールド1
1               1
2               2
3           ...続きを読む

Q3つの表の外部結合

表A、B、Cの3つがあり、Aのすべての行を出力したいと考えています。
外部結合を用いるのだとは思うのですが、3つの表に対して行う場合の
書き方がわからず困っています。
ご教授いただけないでしょうか?
select * from a,b,c
where a.商品ID =b.商品ID (+) and b.商品ID (+) =c.商品ID (+)
としてみましたが、うまくいきませんでした。

Aベストアンサー

ansi構文の趣旨からいえば、結合条件と絞り込み条件は分けて書くので・・

select *
from a
left join b on (a.商品ID =b.商品ID)
left join c on (b.商品ID =c.商品ID)
where a.年月 = 任意の値

と書くのが一般的でしょうね。

QDBエラーの意味

フォームからDBにデータ挿入しようとすると

Column count doesn't match value count at row 1

というエラーが出てしまいます・・・どういう意味を持ったエラーなんでしょうか?

Aベストアンサー

カラム数と値の数が合わない、と言う事です。簡単な英語なので覚えましょう。
カラム数が4つにもかかわらず、
"INSERT INTO tablename VALUES (1,'hoge',3)"
とやった場合等に出るエラーだと思います。

Qで配列(複数の要素)を渡したいとき?

こんにちわ,

今HTML+PHPで
$hoge[]にいくつかの要素が入っているとき,
それをあるfoo.phpというページに渡したいとき,
echo '<form action="foo.php" method="POST">';
echo '<input type="hidden" name="$hoge[]" >';
echo '</form>';
としたのですが,うまくいきません。

どうしたらよろしいでしょうか。

Aベストアンサー

nameじゃなく、valueでは?
あとやるなら、
for($i=0;$i<count($hoge);$i++){
print "<input type=\"hidden\" name=\"$hoge[$i][0]\" value=\"$hoge[$i][1]\">";
}
とか?


人気Q&Aランキング