Lindorm の時間関数は、指定された型と TIMESTAMP 型の間でデータを変換したり、2 つのタイムスタンプ間の日数を計算したりできます。このトピックでは、Lindorm でサポートされている時間関数と、時間関数の使用方法について説明します。
適用可能なエンジンとバージョン
このトピックで説明する時間関数は、LindormTable にのみ適用されます。
LindormTable のバージョンは 2.7.8 以降です。 LindormTable のマイナーバージョンの表示または更新方法については、「LindormTable のリリースノート」および「Lindorm インスタンスのマイナーエンジンバージョンをアップグレードする」をご参照ください。
Lindorm SQL のバージョンは 2.8.7.0 以降である必要があります。 Lindorm SQL のバージョンの表示方法の詳細については、「SQL バージョン」をご参照ください。
サポートされている時間関数
次の表に、Lindorm でサポートされている時間関数を示します。
関数 | 説明 |
現在のセッションのタイムゾーンでタイムスタンプをフォーマットします。 | |
BIGINT、INTEGER、SMALLINT、TINYINT などの数値型のデータを、現在のセッションのタイムゾーンのタイムスタンプに変換します。 2 つのパラメーターを指定した場合、出力の形式は 2 番目のパラメーターに基づきます。 | |
現在のセッションのタイムゾーンにおける 2 つのタイムスタンプ間の日数を計算します。 | |
タイムスタンプまたはタイムスタンプ文字列を UNIX タイムスタンプに変換します。単位:秒。 |
DATE_FORMAT
現在のセッションのタイムゾーンでタイムスタンプをフォーマットします。セッションのタイムゾーンを表示および指定する方法の詳細については、「LindormTable 接続のタイムゾーンを指定する」をご参照ください。
構文
DATE_FORMAT(TIMESTAMP ts, STRING format)パラメーター
パラメーター | 必須 | 説明 |
ts | はい | フォーマットするタイムスタンプ。 |
format | はい | フォーマット指定子。 %<予約文字> または %% など。サポートされているフォーマット指定子については、次の表を参照してください。 |
次の表に、サポートされているフォーマット指定子、出力、および出力の説明を示します。
フォーマット指定子 | 出力 | 説明 |
%a | Sun から Sat | 曜日 (省略形)。 |
%b | Jan から Dec | 月 (省略形)。 |
%c | 0 から 12 | 月 (数値)。 |
%D | 1st、2nd、3rd... | 日 (序数付き)。 |
%d | 00 から 31 | 日 (2 桁の数値)。 |
%e | 00 から 31 | 日 (2 桁の数値)。 |
%f | 000000 から 999999 | マイクロ秒数。 |
%H | 00 から 23 | 時 (24 時間制、2 桁の数値)。 |
%h | 01 から 12 | 時 (12 時間制、2 桁の数値)。 |
%I | 01 から 12 | 時 (12 時間制、2 桁の数値)。 |
%i | 00 から 59 | 分 (2 桁の数値)。 |
%j | 001 から 366 | 年間通算日 (3 桁の数値)。 |
%k | 0 から 23 | 時 (24 時間制、数値)。 |
%l | 1~ から 12 | 時 (12 時間制、数値)。 |
%M | January から December | 月 (完全名)。 |
%m | 01 から 12 | 月 (2 桁の数値)。 |
%p | AM または PM | 午前または午後。 |
%r | hh:mm:ss AM/PM | 12 時間制 (hh:mm:ss 形式、午前 (AM) または午後 (PM) 情報付き)。 |
%S | 00 から 59 | 秒 (2 桁の数値)。 |
%s | 00 から 59 | 秒 (2 桁の数値)。 |
%T | hh:mm:ss | 24 時間制 (hh:mm:ss 形式)。 |
%W | Sunday から Saturday | 曜日 (完全名)。 |
%w | 0 から 6 | 曜日 (数値)。たとえば、 |
%Y | 4 桁の数値 | 年。例: |
%y | 年の最後の 2 桁に基づく 2 桁の数値。 | 年。たとえば、値 |
%% | % | 文字 %。 |
%x | x | 上記のフォーマット指定子に含まれる予約文字以外の文字。たとえば、文字 U は予約文字ではありません。フォーマット指定子 %U は文字 U を表します。 |
% で始まらない文字はすべて元の形式で返されます。
例
現在のセッションのタイムゾーンでタイムスタンプ 2024-01-01 17:20:35 を at 17:20:35 on Jan 1st, 2024 としてフォーマットします。
SELECT DATE_FORMAT('2024-01-01 17:20:35', 'at %T on %b %D, %Y');出力例:
+------------------------------+
| EXPR$0 |
+------------------------------+
| at 17:20:35 on JAN 1st, 2024 |
+------------------------------+返される結果は、フォーマット指定子に基づく形式の文字列です。文字列は、現在のセッションのタイムゾーンのタイムスタンプを表します。
FROM_UNIXTIME
BIGINT、INTEGER、SMALLINT、TINYINT などの数値型のデータを、現在のセッションのタイムゾーンのタイムスタンプに変換します。 2 つのパラメーターを指定した場合、出力の形式は 2 番目のパラメーターに基づきます。
数値型の値は秒単位です。有効数字は最大 3 桁まで保持されます。
構文
数値型データを現在のセッションのタイムゾーンのタイムスタンプに変換します。
FROM_UNIXTIME (Number seconds)数値型データを現在のセッションのタイムゾーンのタイムスタンプに変換し、タイムスタンプをフォーマットします。
FROM_UNIXTIME (Number seconds, STRING format)
パラメーター
パラメーター | 必須 | 説明 |
seconds | はい | UNIX タイムスタンプ。単位:秒。小数点以下最大 3 桁まで保持されます。 seconds パラメーターの値は、 |
format | いいえ | フォーマット指定子。詳細については、「パラメーター」をご参照ください。 |
例
例 1:
UNIX タイムスタンプ
10.1578を現在のセッションのタイムゾーンのタイムスタンプに変換します。SELECT FROM_UNIXTIME(10.1578);出力例:
+-------------------------+ | EXPR$0 | +-------------------------+ | 1970-01-01 08:00:10.158 | +-------------------------+time_zone フィールドを
+03:00に変更し、UNIX タイムスタンプ10.1578を新しいタイムゾーンのタイムスタンプに変換します。-- time_zone フィールドを +03:00 に変更します。 SET @@time_zone='+03:00'; -- 新しいタイムゾーンのタイムスタンプに変換します。 SELECT FROM_UNIXTIME(10.1578);説明接続のタイムゾーンを変更できるのは MySQL プロトコルのみです。詳細については、「MySQL プロトコルを使用してアプリケーションを開発する (推奨)」および「MySQL クライアントを使用して LindormTable に接続し、使用する」をご参照ください。
出力例:
+-------------------------+ | EXPR$0 | +-------------------------+ | 1970-01-01 03:00:10.158 | +-------------------------+
例 2:
UNIX タイムスタンプ
10.1578を現在のセッションのタイムゾーンのタイムスタンプに変換し、タイムスタンプをフォーマットします。SELECT FROM_UNIXTIME(10.1578, 'at %T on %b %D, %Y');出力例:
+------------------------------+ | EXPR$0 | +------------------------------+ | at 08:00:10 on JAN 1st, 1970 | +------------------------------+time_zone フィールドを
+03:00に変更し、UNIX タイムスタンプ10.1578を新しいタイムゾーンのタイムスタンプに変換し、タイムスタンプをフォーマットします。-- time_zone フィールドを +03:00 に変更します。 SET @@time_zone='+03:00'; -- 新しいタイムゾーンのタイムスタンプに変換します。 SELECT FROM_UNIXTIME(10.1578, 'at %T on %b %D, %Y');出力例:
+------------------------------+ | EXPR$0 | +------------------------------+ | at 03:00:10 on JAN 1st, 1970 | +------------------------------+
DATEDIFF
現在のセッションのタイムゾーンにおける 2 つのタイムスタンプ間の日数を計算します。
差を計算するには、最初のタイムスタンプ値から 2 番目のタイムスタンプ値を引きます。次のセクションでは、結果について説明します。
結果が正の場合、最初のタイムスタンプは後の日付を表します。
結果が負の場合、最初のタイムスタンプは前の日付を表します。
結果が
0の場合、2 つのタイムスタンプは同じ日になります。
時、分、秒の情報に関係なく、日付の値のみが自動的に比較されます。
構文
DATEDIFF(TIMESTAMP ts1, TIMESTAMP ts2)パラメーター
パラメーター | 必須 | 説明 |
ts1 | はい | 最初のタイムスタンプ。 |
ts2 | はい | 2 番目のタイムスタンプ。 |
例
例 1:
SELECT DATEDIFF('2024-01-01 15:30:00', '2024-01-02 00:59:59');出力例:
+--------+ | EXPR$0 | +--------+ | -1 | +--------+例 2:
SELECT DATEDIFF('2024-01-05 15:30:00', '2024-01-02 00:59:59');出力例:
+--------+ | EXPR$0 | +--------+ | 3 | +--------+例 3:
SELECT DATEDIFF('2024-01-02 15:30:00', '2024-01-02 00:59:59');出力例:
+--------+ | EXPR$0 | +--------+ | 0 | +--------+
UNIX_TIMESTAMP
タイムスタンプまたはタイムスタンプ文字列を秒単位の UNIX タイムスタンプに変換し、指定された列に DOUBLE 型のデータを返します。
ts パラメーターがタイムスタンプを示す場合、戻り値には小数点以下 3 桁まで保持されます。 ts パラメーターがタイムスタンプ文字列を示す場合、タイムスタンプ文字列は現在のセッションのタイムゾーンのタイムスタンプを表し、戻り値には小数点以下 6 桁まで保持されます。
構文
UNIX_TIMESTAMP (ts)パラメーター
パラメーター | 必須 | 説明 |
ts | はい | 現在のセッションのタイムゾーンのタイムスタンプ。データ型は TIMESTAMP または VARCHAR である必要があります。 |
例
t1 という名前のテーブルを作成します。サンプルコード:
-- t1 という名前のテーブルを作成します。
CREATE TABLE t1(p1 INT, c1 TIMESTAMP, c2 VARCHAR, c3 DOUBLE, PRIMARY KEY(p1));
-- テーブルにデータを挿入します。
UPSERT INTO t1(p1, c1, c2, c3) VALUES
(1, '2025-01-01 08:30:00', '2025-01-01 08:30:00', '12.24'),
(2, '1970-01-01 08:00:00.123', '1970-01-01 08:00:00.123', '10.32'),
(3, '1970-01-01 08:00:10.13579', '1970-01-01 08:00:10.13579', '10.12'),
(4, '1970-01-01 08:00:10.123456789', '1970-01-01 08:00:10.123456789', '17.33');例 1:タイムスタンプまたはタイムスタンプ文字列に対応する UNIX タイムスタンプをクエリします。
SELECT p1, UNIX_TIMESTAMP(c1), UNIX_TIMESTAMP(c2) FROM t1;出力例:
+----+------------+------------+ | p1 | EXPR$1 | EXPR$2 | +----+------------+------------+ | 1 | 1735691400 | 1735691400 | | 2 | 0.123 | 0.123 | | 3 | 10.135 | 10.13579 | | 4 | 10.123 | 10.123457 | +----+------------+------------+例 2:
UNIX_TIMESTAMP(c1) > 10条件を満たすレコード数を計算します。SELECT COUNT(*) FROM t1 WHERE UNIX_TIMESTAMP(c1) > 10;出力例:
+--------+ | EXPR$0 | +--------+ | 3 | +--------+例 3:
UNIX_TIMESTAMP関数の結果を、データ型が DOUBLE のc3列に書き込みます。UPSERT INTO t1(p1, c3) VALUES(1, UNIX_TIMESTAMP('1970-01-01 08:00:00.123'));結果の確認
SELECT * FROM t1文を実行して、書き込み操作が成功したかどうかを確認できます。