
質問お願いします。
text型で持っている[日付+時刻]のデータをdate型に変換後、そのデータと現在時刻の引き算を行いたいのですがSQLiteだとどのような関数を用いれば実現できるのでしょうか?
【状況】
◇現在はtextデータでyyyymmddhh24missを所有。
◇date型に変換できず困惑中。
◇まだ先ですが...引き算をするにはやっぱりInt型に変換が必要?
もしくは関数でtoSecond(sysdate, 保持date型データ)みたいなことが可能?
よろしくお願い致します。
No.1ベストアンサー
- 回答日時:
データベースの勉強から意図的に逃げてたんで詳しくなく手探りです。
なんというかSQLiteの仕様にイラッとしました。
//======================================
http://www.sqlite.org/datatype3.html
>Datatypes In SQLite Version 3
SQLite 3におけるデータ型
(中略)
>1.2 Date and Time Datatype
1.2 日付と時刻のデータ型
>SQLite does not have a storage class set aside for storing dates and/or times. Instead, the built-in Date And Time Functions of SQLite are capable of storing dates and times as TEXT, REAL, or INTEGER values:
SQLiteには日付や時刻を格納して蓄えておくためのクラスはない。そのかわり、SQLiteのビルトインの日付時刻関数は、日付の時刻をTEXT,REAL,INTEGERの値のどれかとして格納する
>TEXT as ISO8601 strings ("YYYY-MM-DD HH:MM:SS.SSS").
>REAL as Julian day numbers, the number of days since noon in on November 24, 4714 B.C. according to the proleptic Gregorian calendar.
>INTEGER as Unix Time, the number of seconds since 1970-01-01 00:00:00 UTC.
TEXTはISO8601の文字列
REALはグリニッジ天文台における、先発グレゴリオ暦 紀元前4714年 正午からの経過日数
INTEGERは1970-01-01 00:00:00 UTCからの経過秒数
>Applications can choose to store dates and times in any of these formats and freely convert between formats using the built-in date and time functions.
アプリケーションはこれらのどのフォーマットで日付や時刻のデータを格納するかというのを選択でき、ビルトインの日付時刻関数を使ってこれらを自由に変換できる。
================================//
さて、ISO8601として認められる書式は
http://www.sqlite.org/lang_datefunc.html
のTime Stringsに乗っている(訳すのは面倒だがわかるだろう)
自分で変換しろってかorz
文字列操作をいちいちやる。
http://ideone.com/5EOaS
ユーザー定義関数みたいなものが作れれば楽なんだけどなあ、確かストアドプロシージャって名前聞いたことあるような。うん、あってるか自信ないけど、とりあえず機能的には、それっぽい
//===========================
http://www.sqlite.org/whentouse.html
>Appropriate Uses For SQLite
SQLiteの適切な利用法
>SQLite is different from most other SQL database engines in that its primary design goal is to be simple:
SQLiteは他の大半のデータベースエンジンと違って、その主な設計目標は「シンプルである」ことである。
(中略)
>Simplicity in a database engine can be either a strength or a weakness, depending on what you are trying to do. In order to achieve simplicity, SQLite has had to sacrifice other characteristics that some people find useful, such as high concurrency, fine-grained access control, a rich set of built-in functions, stored procedures, esoteric SQL language features, XML and/or Java extensions, tera- or peta-byte scalability, and so forth. If you need some of these features and do not mind the added complexity that they bring, then SQLite is probably not the database for you. SQLite is not intended to be an enterprise database engine. It is not designed to compete with Oracle or PostgreSQL.
データベースエンジンにおいて「シンプルさ」は、あなたがやろうとしていること次第で、強みにもなるし弱みにもなる。「シンプルさ」を達成するため、SQLiteは、便利だと感じる人もいる他の機能 - 高い同時実行性やきめ細かいアクセス制御、大量のビルトイン関数、【ストアドプロシージャ】、難解なSQL言語機能 (以下略) 等を犠牲にしなければならなかった。
======================================//
…このまま関数に纏めて単純化は出来ないってことねorz
その日付時刻関数とやらを見てみましょうかね。
http://www.sqlite.org/lang_datefunc.html
ええと、modifierには第一引数に指定された日時に対して操作を加えられる。unixepochは後ろがepochからの秒数を表す数値をDDDDDDDDDD形式にした文字列でない場合には未定義…だから役に立たない。julianday以外は文字列を返しちゃうのでこれしか使えません。julianday関数はさっきも言ったとおり基準日からの日数が帰ります
ってことで、さっきちょっと見せちゃったけど
こういうふうに書くことになった。
http://ideone.com/5EOaS
で、2013年01月12日7時55分1秒と2012年01月12日7時55分1秒の差を求めると、
2012年は閏年なので366.0日が出力されている。だからこれが正しいんだろう。
#と、ここまで書いてから思ったけど、何で3月じゃなくて1月でやったんだろうね、俺
回答遅くなってしまい申し訳有りませんでした。
大変参考になりました、有り難うございます。
やはりこのようにゴリゴリに組まなければならないのですね。。。
教えて頂けた方法をファンクションにして、実用レベルの高いものが作れればソレを利用する方向で考えて行こうと思います。
というか...その柔軟性がSQLiteの売りなのかな。。とか思いました。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) python 気象データの取得 2 2023/06/20 23:54
- Excel(エクセル) Excel2019、2021の売り上げなどの集計表について 4 2022/11/29 14:03
- Excel(エクセル) DATE関数で指定する「日」のセルが関数の場合の対処法 5 2022/09/14 15:46
- Excel(エクセル) Excel2019、2021の日付、曜日の表示について 2 2022/11/29 15:01
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
- C言語・C++・C# C言語初心者 ポインタについて、お助けください、、 2 2023/03/15 23:50
- HTML・CSS WEBサイトの構築。表示データとWEBデザインを分離する考え方を専門用語・業界用語では何と言うか? 8 2022/09/27 09:16
- その他(学校・勉強) この中で間違ってある説明はありますか?詳しい方に教えていただきたいです。 A. 1つのプログラムが複 2 2023/07/14 01:15
- JavaScript gasについて 1 2022/05/31 21:51
- Excel(エクセル) Excelで作成しているシート(表) 5 2023/06/15 10:20
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
SQLで部分的にGROUP BYしたいとき
-
wordの差し込み印刷での日付表示
-
PL/SQLで、期間計算
-
関数IFで、指定日付範囲のデー...
-
SQLがうまくいかない!
-
エクセルのヘッダーを変数で指...
-
エクセル 日付による並べ替え...
-
SQL Serverの型変換について
-
オラクルのレコードカウントの...
-
sysdateのフォーマットが変わり...
-
SQLServerのストアドで1ヶ月前...
-
週の開始日・終了日を求めるSQL
-
OSのシステム日付を変更して...
-
2テーブル間でフィールドの更...
-
ACCESSでDate関数のエラーのついて
-
今日の日付が入った行のデータ...
-
PLSQL CHARの項目を使用した計算
-
日付表示について
-
エクセルVBAでUserFormを起動し...
-
Accessのマクロでモジュールを...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
14桁の日付(YYYYMMDDHHMMSS)を...
-
今日の日付が入った行のデータ...
-
SQLで部分的にGROUP BYしたいとき
-
Accessの数値から時間に変換す...
-
重複するIDのデータを1行にま...
-
SQLサーバで和暦から西暦に変換...
-
日付書式に変換でこまっています!
-
テーブルの主キーをdate型...
-
日数算出SQL
-
wordの差し込み印刷での日付表示
-
oracle 文字列 01:45 を時間に...
-
日付の切り出し方法について
-
Excelグラフの日付軸の日付がず...
-
WHERE句にて「30日前から今日ま...
-
SQL/Loaderでの年月日時分秒の...
-
エクセル 日付による並べ替え...
-
excel 日付のみ置換したいのです
-
DB2のSQL(日付)について
-
指定した年月までのデータを取...
-
日付の最大値レコードを取得す...
おすすめ情報