SQLiteで日付の取得方法とクエリの書き方

このQ&Aのポイント
  • SQLiteで日付の取得方法とクエリの書き方についてお教え頂きたいです。テーブル名はMyTableで、列名はMyDateです。データはYYYYMMDDHHMMSS形式の日付とランダムなアルファベットの組み合わせです。
  • クエリで201502以降のデータを取得したいです。試しにSELECT * FROM MyTable WHERE MyDate >= substr(1,8)というクエリを書いてみましたが、データが取得できませんでした。別のクエリも試しましたが、結果は同じです。
  • どのようにすれば、201502以降のデータを取得することができるでしょうか?お知恵をお貸しいただければ幸いです。
回答を見る
  • ベストアンサー

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) どのようにすれば、データを取得する事ができるでしょうか?よろしくお願いいたします。

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

  • ベストアンサー
  • pringlez
  • ベストアンサー率36% (598/1630)
回答No.1

>そこで下記のような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'」

fflashing
質問者

お礼

お礼が遅くなってしまい申し訳ありません。 「substr('MyDate', 1, 8) >= '201502'」 こちらのやり方で見事欲しい情報を取得できました。ありがとうございます!感謝です。

関連するQ&A

  • SQLite3(PDO)でクエリー件数を取得したい

    SQLite3をPHPで使用しています。 ネットでいろいろ見たのですがわかりませんでしたのでこちらで質問させて頂きました。 SELECTで条件に合うidを抽出した場合にその行数を取得したいのですが、どのようにするとスマートに取得できるのでしょうか? スマートにというのは「データベースへのアクセスが一度で済むような」という意味です。抽出データの取得と件数の取得が一度のアクセスで可能なのでしょうか? $pdo = new PDO(sqlite:test.db); $query = $pdo->prepare('SELECT id FROM testTable WHERE id > 0 AND id < 10'); $query->execute(); 私が現在行なっているのは、データ抽出は上記のコードでやって、件数の取得は以下のようにしています。 $query = $pdo->prepare('SELECT count(*) FROM testTable WHERE id > 0 AND id < 10'); $query->execute(); $num = $query->fetch(PDO::FETCH_NUM); echo $num[0]; ネットで調べてもMySQLやPostgreSQLのことしか載っていなく、なかなかSQLite3での取得方法がわかりません。 お手数ですが教えて頂ければと思います。よろしくお願い致します。

  • SQLiteでご教示願います。

    SQLiteでご教示願います。 DB(MyTable)を 商品名(Koumoku) | 価格(Nedan) | 登録日付(Hizuke) の項目で記録していると仮定して、1日分だけのデータを取り出す際、 もし、今日が2010年10月26日なら select sum(価格) from MyTable where Koumoku ='商品名(ごはん等)' and Hizuke = '2010-10-26' とすれば1日分取得できますが、 日々1日分だけ取得して表示したいと思っています(26日だけ、27日だけと1日から30日まで)。 そのため、'2010-10-26'の部分をPC等のシステムの日付から取得するようにしたいのですが、date(now)等を使ってもうまく行きません。 よろしくお願いいたします。

    • ベストアンサー
    • MySQL
  • phpからsqliteにselect抽出

    phpからsqliteにselect抽出しています。 $sql = "select * from Table where C=?" $st = $db->prepare($sql); $st->bindParam(1, $key, PDO::PARAM_STR); $st->execute(); while ($row = $st->fetch(PDO::FETCH_ASSOC)) { *** *** } でエラーにはなりませんが、データがとれません。 updateやinsertで?(インジェクション)はうまくいくのですが、Selectでなぜ取得できないのでしょうか? bindParamをarrayにしたりprepare をqueryにしたりしましたが、 データが1件しか取れなかったりします。

    • ベストアンサー
    • PHP
  • SQLiteで特定の順位をもつ項目を検索する方法

    SQLiteにおいて、とある一意の数値nが全体のうちの何番目に位置するかどうかは以下のようなクエリで取得できます。 select *,(select count(*)+1 from card as c where c.n < card.n) as idx from card where... 今回は「項目Bに×をもち、かつ順位が○位以上である」や「項目Cに△が含まれる、もしくは順位が○位以下」といったように、順位が条件に含まれるクエリを考えているのですが、これを少ない手順で再現する方法があればお教えください。

  • sqlite_open()なんですが

    PHPで <?php $db=sqlite_open("rensyuu.sqlite",0666,$err); $row=sqlite_query($db,"select count(*) from sqlite_master where name='tb1';"); $kotae=sqlite_fetch_single($row); print($kotae); sqlite_close($db); ?> と打ったものを実行したら、 Warning: sqlite_open() [function.sqlite-open]: file is encrypted or is not a database in.... というエラーになりました。 どうもsqlite3で作ったのが原因っぽいんですがなにか ご存知でしたら教えていただけませんか。

  • SQLite C/C++ でのテーブル数の取得

    よろしくお願いします。  テーブル名「TB1332」の有無を確認するSQL 文をこのようにしました select count(*) from sqlite_master where type='table' and name='TB1332'; PupSQLite でのcount(*)の値 当該テーブルが存在する場合 1 当該テーブルが存在しない場合 0 このように正しい結果が得られます。 しかし、Visul Studio 2010 C++ で下記のコードを実行しますと、result の値は、テーブルの有無に関係なく、常に0となります。 int result = sqlite3_exec(pDb, "select count(*) from sqlite_master where type='table' and name='TB1332';", NULL, NULL, &err); C/C++ で該当する、テーブル数を取得するコードの書き方を教えていただけないでしょうか。 環境 C/C++ Visual Studio 2010 Proffesional SQLite3 PupSQLite https://www.eonet.ne.jp/~pup/software.html

  • SQLiteでソートした結果をファイルに反映させたい

    あるソフトのデータがSQLiteの形式だと分かり、SQLiteのソフトで開きました。特定のID以外の項目を: DELETE FROM outbox WHERE user_id <> 7777777; で、消し、 SELECT * FROM outbox ORDER BY date_time; でソートしました。しかし、DELETEの方はファイルに反映されたのに、 SELECTの方は、ファイルに反映されません。 SQLite Database Browserというソフトを使っています。 何も分からない状態からここまで来たのです。 あと少しなので、よろしくお願い致します。

  • 指定した行から指定した行数文データを取得したい

    WEB上で、1ページ10行のデータを表示したいので、 10行ずつデータを取得できるSQLを書きたいと思うのですが、方法が分かりません。 参考書に 41行目から50行目を取得する方法として SELECT TOP 10 A,B FROM MyTable WHERE keyID Not IN (SELECT TOP 40 keyID FROM myTable) とかかれていました。 この場合、データが keyID,A,B 1,A1,B1 2,A2,B2 ・ ・ ・ 40,A*,B* 41,A*,B* ・ ・ とkeyIDが重複しない時ですよね。 主キーが複数あるときはどのようなSQL文にすればいいのでしょうか?

  • SQLiteのLike句で抽出できない

    SQLiteのLike句で抽出できないレコードがあります。 原因についてご教授いただけますでしょうか。 以下、操作手順になります。 ■データベースの作成 C:\>sqlite3.exe member.db SQLite version 3.7.15.2 2013-01-09 11:53:05 Enter ".help" for instructions Enter SQL statements terminated with a ";" ■テーブルの作成、レコードの追加 sqlite> create table t_member(name text, age integer); sqlite> insert into t_member values('山田一郎', 25); sqlite> insert into t_member values('田中次郎', 35); sqlite> insert into t_member values('鈴木三郎', 45); ■検索 sqlite> select * from t_member where name like '%一郎'; 山田一郎|25 sqlite> select * from t_member where name like '%次郎'; 田中次郎|35 sqlite> select * from t_member where name like '%三郎'; sqlite> 三郎だけが検索条件に適合しないのは何故でしょうか。 よろしくお願いします。

  • 日付の期間内のデータ取得方法は?

    お世話になります。 Microsoft SQL server で、日付の期間内のデータを取得するにはどのような形にすれば良いのでしょうか? たとえば SELECT a FROM data WHERE ... and ... よろしくお願いいたします。