C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

MySQLを使って日付(年月)の比較をしたい。

[トピック内 7 記事 (1 - 7 表示)]  << 0 >>

■92579 / inTopicNo.1)  MySQLを使って日付(年月)の比較をしたい。
  
□投稿者/ 初心者 (23回)-(2019/10/08(Tue) 17:54:07)

分類:[ソフトウェア全般] 


お世話になっております。
宜しくお願い致します。

タイトルにも記載の通り、MySQLを使って日付(年月)の比較をしたいと考えております。
Teble1の中に比較対象となるDATE1とDATE2が2つ入ってると仮定して。

例えばDATE1を基準としたときに、DATE1よりもDATE2の方が古い日付(年月)の場合はFalseつまり0
それ以外の場合はTrueつまり0としたいのですがどうクエリに記述したらいいのか分からず
生き詰まっております。

分からなすぎて全然書いておらず、参考にはならないと思うのですが
記述したものを書いておきます。

SELECT
ID1
, ID2
, DATE_FORMAT(DATE1, '%Y年%m月') AS date1
, DATE_FORMAT(DATE2, '%Y年%m月') AS date2
FROM Teble1

実装したいこと
本来は縦なのですが横に書かせていただきます。
ID1   1 2 
ID2   2 2
date1  2019年10月 2019年10月
date2  2017年10月 2020年10月
olddate 0 1

こんな感じで実装できればなと思っております。
お力のほどお貸しいただければと思います。


引用返信 編集キー/
■92580 / inTopicNo.2)  Re[1]: MySQLを使って日付(年月)の比較をしたい。
□投稿者/ 魔界の仮面弁士 (2418回)-(2019/10/08(Tue) 17:59:51)
No92579 (初心者 さん) に返信
> 生き詰まっております。
 行き詰まる?

> 例えばDATE1を基準としたときに、DATE1よりもDATE2の方が古い日付(年月)の場合はFalseつまり0
> それ以外の場合はTrueつまり0としたいのですがどうクエリに記述したらいいのか分からず

False も True も固定値 0 で表すのなら、そもそも判断する必要も無いかも。

DATE1 < DATE2 を「0」
DATE1 ≧ DATE2 を「1」と表すなら、たとえばこうとか。

SELECT ID1, ID2, CASE WHEN DATE1 < DATE2 THEN 0 ELSE 1 END As olddate FROM Teble1
引用返信 編集キー/
■92582 / inTopicNo.3)  Re[2]: MySQLを使って日付(年月)の比較をしたい。
□投稿者/ kaina (53回)-(2019/10/09(Wed) 09:23:24)
DATE1とDATE2はdatetime型かな?
であれば、DATEDIFF関数を使用すると良いかと思います。
こんな感じで使用し、DATE1とDATE2の差分の数値が求められます。
DATEDIFF(DATE1, DATE2) > 0

以下、MySQLの公式リファレンスになります。
https://dev.mysql.com/doc/refman/5.6/ja/date-and-time-functions.html#function_datediff

引用返信 編集キー/
■92583 / inTopicNo.4)  Re[2]: MySQLを使って日付(年月)の比較をしたい。
□投稿者/ 初心者 (24回)-(2019/10/09(Wed) 09:31:15)
No92580 (魔界の仮面弁士 さん) に返信

>  行き詰まる?

漢字間違えました…。

> False も True も固定値 0 で表すのなら、そもそも判断する必要も無いかも。
>
> DATE1 < DATE2 を「0」
> DATE1 ≧ DATE2 を「1」と表すなら、たとえばこうとか。
>
> SELECT ID1, ID2, CASE WHEN DATE1 < DATE2 THEN 0 ELSE 1 END As olddate FROM Teble1

実装できました、ありがとうございます。
他にも条件を加える場合は、CASE分を増やせばいいんですよね?

(魔界の仮面弁士さんが教えてくださった例えの不等号が逆の場合)
DATE1 < DATE2 を「0」
DATE1 ≦ DATE2 を「1

CASE WHEN DATE1 < DATE2 THEN 0 ELSE 1 END As nowdate



引用返信 編集キー/
■92585 / inTopicNo.5)  Re[3]: MySQLを使って日付(年月)の比較をしたい。
□投稿者/ 初心者 (25回)-(2019/10/09(Wed) 09:36:03)
No92582 (kaina さん) に返信

ご回答ありがとうございます

> DATE1とDATE2はdatetime型かな?

DATE1とDATE2はdate型です。

> であれば、DATEDIFF関数を使用すると良いかと思います。
> こんな感じで使用し、DATE1とDATE2の差分の数値が求められます。
> DATEDIFF(DATE1, DATE2) > 0
> 以下、MySQLの公式リファレンスになります。
> https://dev.mysql.com/doc/refman/5.6/ja/date-and-time-functions.html#function_datediff

DATEDIFFで差分を求められるんですね。
今回は大きいか・小さいかだけを知りたかったので、今後の参考にしたいと思います。
勉強になりました。
引用返信 編集キー/
■92587 / inTopicNo.6)  Re[4]: MySQLを使って日付(年月)の比較をしたい。
□投稿者/ kaina (54回)-(2019/10/09(Wed) 10:32:44)
ちょっと不正確な表現になっていたので、訂正します。
比較に使用するデータ型はDATETIME型でもDATE型でも文字列(日付式(YYYY-MM-DD))でも比較できます。

ただし、初心者さんがおっしゃる通り、単純に大きいか小さいかの比較であれば
弁士さんの方法で問題ありません。

ついでですが、日付の比較に関するMySQLの公式リファレンスのURLを載せておきますので、
お時間があれば一読いただければ理解が深まるのではないかと思います。

https://dev.mysql.com/doc/refman/5.6/ja/using-date.html

後、解決したのであれば、解決済みのチェックお願いします。

引用返信 編集キー/
■92590 / inTopicNo.7)  Re[5]: MySQLを使って日付(年月)の比較をしたい。
□投稿者/ 初心者 (26回)-(2019/10/09(Wed) 11:23:00)
No92587 (kaina さん) に返信
> ちょっと不正確な表現になっていたので、訂正します。
> 比較に使用するデータ型はDATETIME型でもDATE型でも文字列(日付式(YYYY-MM-DD))でも比較できます。
>
> ただし、初心者さんがおっしゃる通り、単純に大きいか小さいかの比較であれば
> 弁士さんの方法で問題ありません。
>
> ついでですが、日付の比較に関するMySQLの公式リファレンスのURLを載せておきますので、
> お時間があれば一読いただければ理解が深まるのではないかと思います。
>
> https://dev.mysql.com/doc/refman/5.6/ja/using-date.html
>
> 後、解決したのであれば、解決済みのチェックお願いします。

URL参考になります。ありがとうございます。
回答待ちだったため念のためチェックを入れてなかったのですが、チェックしておきます。

解決済み
引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ