SQLiteでは、'12 -AUG-15 'と読んでいる日付の例として、'日付 'フィールドがvarchar(20)です。私は日付フィールドを4つの別々のフィールドに分割する必要があります: 'day'、 'month'、 'year'、 'month_num'問題は月の名前を数字に変換する方法と、年を4桁の年に変換する方法がわからないことです。私は、大文字と小文字の連結機能を使用することを考えていますか?どのようにそれを開始するためのアドバイスは非常に感謝しています。SQLiteの日付分割
1
A
答えて
3
SQLiteは非常に制限されており、dateと文字列関数です。日付関数はISO 8601を理解しています。あなたは長期的にISO 8601に変換し、日付機能を使用する方が良いでしょう。それはより良く分類され、ほとんどすべてがISO 8601フォーマットを理解しています。
SQLiteには簡単な方法はありませんが、変換を行うためのユーザ定義関数を書くことができます。ほとんどのSQLiteドライバでは、使用している言語を問わず使用できます。以下はRubyの例です。
require "sqlite3"
require "date"
# Open a database
db = SQLite3::Database.new "test.db"
# Create a SQLite function date_to_iso()
db.create_function("date_to_iso", 1) do |proxy, date|
# Convert 12-AUG-15 to 2015-08-12 (ISO 8601 format)
iso = Date.strptime(date, "%d-%b-%y");
# This is how you return the result via a FunctionProxy
proxy.result = iso.to_s
end
# Now you can use date_iso_iso() in SQLite queries in this process.
db.execute("UPDATE stuff SET date = date_to_iso(date)")
次に、strftime
を使用して、個々の日付部分を照会することができます。
select
strftime("%d", date) as day,
strftime("%m", month) as month,
strftime("%Y", year) as year
from whatever;
残念ながら、SQLiteには月の名前に変換する方法がありません。あなたは大きなCASEステートメントを書くことができます。
select case strftime("%m", month)
when 1 then 'JAN'
when 2 then 'FEB'
...
end
from whatever;
また、変換を行う別のユーザー定義関数を追加することもできます。
標準の日付書式を使用しているので、ISO 8601の日付全体を返すだけで、アプリケーションで必要な作業を行うことができます。
関連する問題
- 1. 日付の分割アレイ
- 2. SQLite日付クエリ
- 3. sqlite日付ソート
- 4. php - 日付範囲を分割して
- 5. sqliteの分割カラムの値
- 6. PHPでのページ分割SQLite
- 7. 日付をソートSQLITE
- 8. Sqliteの日付の違い
- 9. 日付を基準に半分のデータを分割する
- 10. のSQLite:日付と平均
- 11. SQLiteクエリの日付書式
- 12. アンドロイド - SQLiteのレルム日の日付が
- 13. SQLiteのフォーマット日付と分数を差し引く
- 14. SQLiteに日付を格納
- 15. 日付付き割引スクリプト
- 16. AndroidのSQLite:長い日付と日付に変換する
- 17. どのように日付のベクトルを日に分割するのですか?
- 18. 別の列(メール)に基づく分割列(日付)
- 19. スライサーで前後のグラフを日付で分割します
- 20. 別々の日付でリストを分割する
- 21. BQ日付の代わりに列別に分割する
- 22. 日付(月)とグループに基づくクエリのC#分割結果
- 23. postgresql既存のテーブルから日付で分割する
- 24. タイムスタンプの列を日付と時刻に分割する方法
- 25. 日付/時刻をピリオドに分割する文の場合
- 26. mongodbのdatetimeから日付を分割する方法は?
- 27. ヨーロッパの日付でCoreNLP文分割を修正しました
- 28. 私のアプリケーションのSqliteの日付フォーマット
- 29. SQLiteの日付フィールドのJavaScriptのDateオブジェクト
- 30. AndroidのSQLiteの日付のクエリ
SQLiteは 'varchar'の制限を受け入れません。 ['varchar(20)'は 'text''](https://www.sqlite.org/datatype3.html)です。一般的には、テーブルにサイズ制限を使用しないでください。スペースを節約できません。これは、データスキーマのビジネスロジックをハードコーディングしています。 – Schwern
私はユーザー定義のSQLite関数でこれを行う方法を示すために私の答えを変更しました。 – Schwern