すべてのプロダクト
Search
ドキュメントセンター

Lindorm:時間関数

最終更新日:Mar 19, 2025

Lindorm の時間関数は、指定された型と TIMESTAMP 型の間でデータを変換したり、2 つのタイムスタンプ間の日数を計算したりできます。このトピックでは、Lindorm でサポートされている時間関数と、時間関数の使用方法について説明します。

適用可能なエンジンとバージョン

重要

Lindorm SQL のバージョンは 2.8.7.0 以降である必要があります。 Lindorm SQL のバージョンの表示方法の詳細については、「SQL バージョン」をご参照ください。

サポートされている時間関数

次の表に、Lindorm でサポートされている時間関数を示します。

関数

説明

DATE_FORMAT

現在のセッションのタイムゾーンでタイムスタンプをフォーマットします。

FROM_UNIXTIME

BIGINT、INTEGER、SMALLINT、TINYINT などの数値型のデータを、現在のセッションのタイムゾーンのタイムスタンプに変換します。 2 つのパラメーターを指定した場合、出力の形式は 2 番目のパラメーターに基づきます。

DATEDIFF

現在のセッションのタイムゾーンにおける 2 つのタイムスタンプ間の日数を計算します。

UNIX_TIMESTAMP

タイムスタンプまたはタイムスタンプ文字列を 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

曜日 (数値)。たとえば、0 は日曜日、1 は月曜日を示します。

%Y

4 桁の数値

年。例:2025

%y

年の最後の 2 桁に基づく 2 桁の数値。

年。たとえば、値 242024 年を示します。

%%

%

文字 %。

%x

x

上記のフォーマット指定子に含まれる予約文字以外の文字。たとえば、文字 U は予約文字ではありません。フォーマット指定子 %U は文字 U を表します。

重要

% で始まらない文字はすべて元の形式で返されます。

現在のセッションのタイムゾーンでタイムスタンプ 2024-01-01 17:20:35at 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 パラメーターの値は、1970 年 1 月 1 日 00:00:00 から経過した秒数を示します。時間は UTC である必要があります。FROM_UNIXTIME 関数は、この値を現在のセッションのタイムゾーンのタイムスタンプに変換します。

format

いいえ

フォーマット指定子。詳細については、「パラメーター」をご参照ください。

  • 例 1:

    1. UNIX タイムスタンプ 10.1578 を現在のセッションのタイムゾーンのタイムスタンプに変換します。

      SELECT FROM_UNIXTIME(10.1578);

      出力例:

      +-------------------------+
      | EXPR$0                  |
      +-------------------------+
      | 1970-01-01 08:00:10.158 |
      +-------------------------+
    2. 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:

    1. UNIX タイムスタンプ 10.1578 を現在のセッションのタイムゾーンのタイムスタンプに変換し、タイムスタンプをフォーマットします。

      SELECT FROM_UNIXTIME(10.1578, 'at %T on %b %D, %Y');

      出力例:

      +------------------------------+
      | EXPR$0                       |
      +------------------------------+
      | at 08:00:10 on JAN 1st, 1970 |
      +------------------------------+
    2. 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 桁まで保持されます。

重要
  • LindormTable のバージョンは 2.8.0 以降、Lindorm SQL のバージョンは 2.9.0.0 以降である必要があります。 Lindorm コンソールで LindormTable と Lindorm SQL のバージョンを表示し、LindormTable のマイナーバージョンを 2.8.0 以降に更新できます。

  • UNIX_TIMESTAMP 関数は、SELECT 文の射影句と WHERE 句で使用でき、UPSERT 文の VALUES 句でも使用できます。

構文

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 文を実行して、書き込み操作が成功したかどうかを確認できます。