sqlite
データ型
サーチ…
備考
公式文書: SQLiteバージョン3のデータ型
TYPEOF関数
sqlite> SELECT TYPEOF(NULL);
null
sqlite> SELECT TYPEOF(42);
integer
sqlite> SELECT TYPEOF(3.141592653589793);
real
sqlite> SELECT TYPEOF('Hello, world!');
text
sqlite> SELECT TYPEOF(X'0123456789ABCDEF');
blob
ブール値の使用
ブール値の場合、SQLiteは整数0と1使います:
sqlite> SELECT 2 + 2 = 4;
1
sqlite> SELECT 'a' = 'b';
0
sqlite> SELECT typeof('a' = 'b');
integer
> CREATE TABLE Users ( Name, IsAdmin );
> INSERT INTO Users VALUES ('root', 1);
> INSERT INTO Users VALUES ('john', 0);
> SELECT Name FROM Users WHERE IsAdmin;
root
列の種類を強制する
SQLiteは動的型定義を使用し、宣言された列型を無視します。
> CREATE TABLE Test (
Col1 INTEGER,
Col2 VARCHAR(2), -- length is ignored, too
Col3 BLOB,
Col4, -- no type required
Col5 FLUFFY BUNNIES -- use whatever you want
);
> INSERT INTO Test VALUES (1, 1, 1, 1, 1);
> INSERT INTO Test VALUES ('xxx', 'xxx', 'xxx', 'xxx', 'xxx');
> SELECT * FROM Test;
1 1 1 1 1
xxx xxx xxx xxx xxx
(ただし、宣言された列型は型の親和性に使用されます。)
型を強制するには、 typeof()関数で制約を追加する必要があります 。
CREATE TABLE Tab (
Col1 TEXT CHECK (typeof(Col1) = 'text' AND length(Col1) <= 10),
[...]
);
(そのような列を'null'可能にする必要がある場合は、明示的に'null'許可する必要があります)。
日付/時刻の種類
SQLiteには、日付または時刻の値に別のデータ型はありません。
ISO8601文字列
ビルトインキーワードCURRENT_DATE 、 CURRENT_TIME 、およびCURRENT_TIMESTAMPは、ISO8601形式の文字列を返します。
> SELECT CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP;
CURRENT_DATE CURRENT_TIME CURRENT_TIMESTAMP
------------ ------------ -------------------
2016-07-08 12:34:56 2016-07-08 12:34:56
このような値は、 組み込みの日付/時刻関数によっても理解されます 。
> SELECT strftime('%Y', '2016-07-08');
2016
ジュリアンの日番号
組み込みの日付/時刻関数は、数字をユリウス日として解釈します。
> SELECT datetime(2457578.02425926);
2016-07-08 12:34:56
julianday()関数は、サポートされている任意の日付/時刻値をユリウス日に変換します。
> SELECT julianday('2016-07-08 12:34:56');
2457578.02425926
Unixタイムスタンプ
組み込みの日付/時刻関数は、 unixepoch修飾子を使用して数値をUnixタイムスタンプとして解釈できます。
> SELECT datetime(0, 'unixepoch');
1970-01-01 00:00:00
strftime()関数は、サポートされている任意の日付/時刻の値をUnixのタイムスタンプに変換できます。
> SELECT strftime('%s', '2016-07-08 12:34:56');
1467981296
サポートされていないフォーマット
日付/時刻の値を他の形式でデータベースに格納することは可能ですが、組み込みの日付/時刻関数はそれらを解析せず、NULLを返します。
> SELECT time('1:30:00'); -- not two digits
> SELECT datetime('8 Jul 2016');
Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow