1

日付登録列を含むテーブルを作成しています。「YYYY-MM-DD」の形式でフォーマットしたい。私はすでにこれを試みました...

CREATE TABLE patient(
    dateregistered text format 'YYYY-MM-DD' not null
);

今、私が抱えている問題は、日付を別の形式(つまり、11-05-2015)で入力すると、その日付がテーブルに受け入れられることです。エラーメッセージを表示したり、設定した形式に再フォーマットしたりするべきではありませんか? (20015 年 32 月 13 日など、データが間違って入力されていない限り、後者を好みます)

誰かが私が間違っていることを教えてもらえますか?

敬具。

4

1 に答える 1

0

2 つの異なる要素があります。

  1. データベースに保存される日付の形式
  2. 日付の表示形式

これら 2 つは混同しやすく、SQLite を使用する場合はさらに混同しやすくなります。

ただし、日付をテキストとしてデータベースに格納することはお勧めできません。これは、データベースが「ABC」だけでなく、「2015-13-01」や「2015-02-29」などの無効な日付を格納できることを意味します。

また、データベースは、10 文字の文字列よりも日付の数値表現の方が高速に動作します。数値表現を使用すると、たとえば日付に 1 日を追加する (+1) などの日付計算をより簡単に実行できますが、文字列表現を使用すると、より複雑になります。

ここに提案があります:

1. 日付格納タイプ

次のようにテーブルを作成します。

CREATE TABLE patient(
    dateregistered int not null
);

次のように値を挿入します。

2. 日付の挿入

insert into patient values (julianday('2015-12-31'));

この設定により、無効な日付は有効な日付に変更されるか、拒否されます。例えば:

julianday('2015-02-29')

2015-03-01 がテーブルに格納されます。この:

julianday('2015-13-20')

NULL 値になり、挿入時にエラーが発生します。

有効な日付ではないものを挿入することは実際には不可能になります。

3. 日付のクエリ

次のような読み取り可能な形式で日付を取得します。

select date(dateregistered)
from   patient

日付関数は、YYYY-MM-DD への書式設定を処理します。

ただし、1 日を追加するなどの計算を行うこともできます。

select date(dateregistered+1)
from   patient

または、dateinvitedのような別の日付もある場合は、これら 2 つのイベント間の日数を簡単に取得できます。

select dateinvited - dateregistered
from   patient

4. オプション: ビューを作成する

date(...)YYYY-MM-DD 形式で日付を照会するたびに指定するのが面倒な場合は、これを行うビューを作成します。

create view vw_patient as
select date(dateregistered) dateregistered
from   patient

そして、そのビューから選択すると:

select dateregistered
from   vw_patient

次の文字列が得られます。

2015-02-28

于 2016-03-19T19:22:42.023 に答える