みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

SQLiteで日付の取得

SQLiteのクエリについてお教え頂けませんでしょうか?

テーブル名:MyTable
列名:MyDate(TEXT型)

MyDateのデータ
20150501102722_XYZ
20150502102722_AVC
20150505102722_BCD

データはYYYYMMDDHHMMSS形式 + ランダムなアルファベットになっています。

クエリで201502以上のデータを取得したいと思っています。つまり、
20150502102722_AVC
20150505102722_BCD

上記の2つのデータが欲しいです。

そこで下記のようなSQLを書きました。

SELECT * FROM MyTable WHERE MyDate >= substr(1,8)

しかしデータは1件も取得できませんでした。

そこで、試しに下記のようなクエリも書いてみましたが、これもダメでした。

SELECT * FROM MyTable WHERE MyDate = substr(1,8)

どのようにすれば、データを取得する事ができるでしょうか?よろしくお願いいたします。

投稿日時 - 2015-05-06 14:11:53

QNo.8969999

困ってます

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

>そこで下記のようなSQLを書きました。
>SELECT * FROM MyTable WHERE MyDate >= substr(1,8)

どう突っ込んでいいのか…。DBをさわるのもプログラミングをするのもほぼ初めてという感じの方なのでしょうか?
それを前提に書きますが

「WHERE」の右側には評価される式を書きます。
「MyDate >= substr(1,8)」ここですね。

この等号もしくは不等号の左右に比較する値を書くわけです。


で、あなたは何と何を比較したいのか、そこをまずあわてずにきちんと考えましょう。

あなたの式だと「MyDate」の値と
「substr(1,8)」を実行した結果を比較しているわけです。

そうしたいのですか?違うのではないでしょうか?
「201502以上のデータを取得したい」というのなら、
式でも「201502」と比較しなければいけないとは思いませんか?

で、「MyDate」の先頭8文字を切り取った文字列と「201502」を比較したいのですよね。
そもそもsubstrの使い方も違うのでそこも書き換えますと、こんなかんじでしょうか。
「substr('MyDate', 1, 8) >= '201502'」

投稿日時 - 2015-05-06 15:10:57

お礼

お礼が遅くなってしまい申し訳ありません。

「substr('MyDate', 1, 8) >= '201502'」

こちらのやり方で見事欲しい情報を取得できました。ありがとうございます!感謝です。

投稿日時 - 2015-05-13 21:52:47

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問