--- slug: /ja/sql-reference/functions/uuid-functions sidebar_position: 205 sidebar_label: UUIDs --- # UUID を扱う関数 ## generateUUIDv4 [バージョン4](https://tools.ietf.org/html/rfc4122#section-4.4)の[UUID](../data-types/uuid.md)を生成します。 **構文** ``` sql generateUUIDv4([expr]) ``` **引数** - `expr` — クエリ内で関数が複数回呼ばれる場合に[共通部分式の除去](../functions/index.md#common-subexpression-elimination)を回避するための任意の[式](../syntax.md#syntax-expressions)。式の値は返されるUUIDに影響を与えません。省略可能。 **返される値** UUIDv4 型の値。 **例** まず、UUID型のカラムを持つテーブルを作成し、そのテーブルに生成されたUUIDv4を挿入します。 ``` sql CREATE TABLE tab (uuid UUID) ENGINE = Memory; INSERT INTO tab SELECT generateUUIDv4(); SELECT * FROM tab; ``` 結果: ```response ┌─────────────────────────────────uuid─┐ │ f4bf890f-f9dc-4332-ad5c-0c18e73f28e9 │ └──────────────────────────────────────┘ ``` **行ごとに複数のUUIDを生成する例** ```sql SELECT generateUUIDv4(1), generateUUIDv4(2); ┌─generateUUIDv4(1)────────────────────┬─generateUUIDv4(2)────────────────────┐ │ 2d49dc6e-ddce-4cd0-afb8-790956df54c1 │ 8abf8c13-7dea-4fdf-af3e-0e18767770e6 │ └──────────────────────────────────────┴──────────────────────────────────────┘ ``` ## generateUUIDv7 {#generateUUIDv7} [バージョン7](https://datatracker.ietf.org/doc/html/draft-peabody-dispatch-new-uuid-format-04)の[UUID](../data-types/uuid.md)を生成します。 生成されたUUIDは、ミリ秒単位の現在のUnixタイムスタンプ(48ビット)、バージョン「7」(4ビット)、ミリ秒内でUUIDを区別するためのカウンタ(42ビット)、およびランダムフィールド(32ビット)を含みます。 特定のタイムスタンプ(unix_ts_ms)の場合、カウンタはランダムな値から始まり、新しいUUIDごとに1ずつ増加します。 カウンタがオーバーフローした場合、タイムスタンプフィールドは1増加し、カウンタはランダムな新しい開始値にリセットされます。 関数`generateUUIDv7`は、並行して実行されているスレッドおよびクエリ間で、タイムスタンプ内のカウンタフィールドが単調に増加することを保証します。 ``` 0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 ├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤ | unix_ts_ms | ├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤ | unix_ts_ms | ver | counter_high_bits | ├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤ |var| counter_low_bits | ├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤ | rand_b | └─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┘ ``` :::note 2024年4月時点で、バージョン7のUUIDはドラフトステータスであり、将来そのレイアウトが変更される可能性があります。 ::: **構文** ``` sql generateUUIDv7([expr]) ``` **引数** - `expr` — クエリ内で関数が複数回呼ばれる場合に[共通部分式の除去](../functions/index.md#common-subexpression-elimination)を回避するための任意の[式](../syntax.md#syntax-expressions)。式の値は返されるUUIDに影響を与えません。省略可能。 **返される値** UUIDv7 型の値。 **例** まず、UUID型のカラムを持つテーブルを作成し、そのテーブルに生成されたUUIDv7を挿入します。 ``` sql CREATE TABLE tab (uuid UUID) ENGINE = Memory; INSERT INTO tab SELECT generateUUIDv7(); SELECT * FROM tab; ``` 結果: ```response ┌─────────────────────────────────uuid─┐ │ 018f05af-f4a8-778f-beee-1bedbc95c93b │ └──────────────────────────────────────┘ ``` **行ごとに複数のUUIDを生成する例** ```sql SELECT generateUUIDv7(1), generateUUIDv7(2); ┌─generateUUIDv7(1)────────────────────┬─generateUUIDv7(2)────────────────────┐ │ 018f05c9-4ab8-7b86-b64e-c9f03fbd45d1 │ 018f05c9-4ab8-7b86-b64e-c9f12efb7e16 │ └──────────────────────────────────────┴──────────────────────────────────────┘ ``` ## empty 入力UUIDが空であるかどうかを確認します。 **構文** ```sql empty(UUID) ``` UUIDはすべてのビットがゼロ(ゼロUUID)であるときに空と見なされます。 この関数は[Arrays](array-functions.md#function-empty)や[Strings](string-functions.md#empty)に対しても機能します。 **引数** - `x` — UUID。 [UUID](../data-types/uuid.md)。 **返される値** - 空のUUIDの場合は`1`、空でないUUIDの場合は`0`を返します。 [UInt8](../data-types/int-uint.md)。 **例** UUID値を生成するために、ClickHouseは[generateUUIDv4](#generateuuidv4)関数を提供します。 クエリ: ```sql SELECT empty(generateUUIDv4()); ``` 結果: ```response ┌─empty(generateUUIDv4())─┐ │ 0 │ └─────────────────────────┘ ``` ## notEmpty 入力UUIDが空でないかどうかを確認します。 **構文** ```sql notEmpty(UUID) ``` UUIDはすべてのビットがゼロ(ゼロUUID)であるときに空と見なされます。 この関数は[Arrays](array-functions.md#function-notempty)や[Strings](string-functions.md#notempty)に対しても機能します。 **引数** - `x` — UUID。 [UUID](../data-types/uuid.md)。 **返される値** - 空でないUUIDの場合は`1`、空のUUIDの場合は`0`を返します。 [UInt8](../data-types/int-uint.md)。 **例** UUID値を生成するために、ClickHouseは[generateUUIDv4](#generateuuidv4)関数を提供します。 クエリ: ```sql SELECT notEmpty(generateUUIDv4()); ``` 結果: ```response ┌─notEmpty(generateUUIDv4())─┐ │ 1 │ └────────────────────────────┘ ``` ## toUUID 文字列型の値をUUIDに変換します。 ``` sql toUUID(string) ``` **返される値** UUID型の値。 **使用例** ``` sql SELECT toUUID('61f0c404-5cb3-11e7-907b-a6006ad3dba0') AS uuid ``` 結果: ```response ┌─────────────────────────────────uuid─┐ │ 61f0c404-5cb3-11e7-907b-a6006ad3dba0 │ └──────────────────────────────────────┘ ``` ## toUUIDOrDefault **引数** - `string` — 36文字の文字列またはFixedString(36)。 [String](../syntax.md#string)。 - `default` — 最初の引数がUUID型に変換できない場合に使用されるデフォルトのUUID。 [UUID](../data-types/uuid.md)。 **返される値** UUID ``` sql toUUIDOrDefault(string, default) ``` **返される値** UUID型の値。 **使用例** 最初の例は、変換可能な場合、最初の引数をUUID型に変換して返します。 ``` sql SELECT toUUIDOrDefault('61f0c404-5cb3-11e7-907b-a6006ad3dba0', cast('59f0c404-5cb3-11e7-907b-a6006ad3dba0' as UUID)); ``` 結果: ```response ┌─toUUIDOrDefault('61f0c404-5cb3-11e7-907b-a6006ad3dba0', CAST('59f0c404-5cb3-11e7-907b-a6006ad3dba0', 'UUID'))─┐ │ 61f0c404-5cb3-11e7-907b-a6006ad3dba0 │ └───────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ ``` 2つ目の例では、最初の引数がUUID型に変換できない場合、2つ目の引数(提供されたデフォルトのUUID)を返します。 ```sql SELECT toUUIDOrDefault('-----61f0c404-5cb3-11e7-907b-a6006ad3dba0', cast('59f0c404-5cb3-11e7-907b-a6006ad3dba0' as UUID)); ``` 結果: ```response ┌─toUUIDOrDefault('-----61f0c404-5cb3-11e7-907b-a6006ad3dba0', CAST('59f0c404-5cb3-11e7-907b-a6006ad3dba0', 'UUID'))─┐ │ 59f0c404-5cb3-11e7-907b-a6006ad3dba0 │ └────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ ``` ## toUUIDOrNull 文字列型の引数を受け取り、UUIDへの変換を試みます。失敗した場合、NULLを返します。 ``` sql toUUIDOrNull(string) ``` **返される値** Nullable(UUID)型の値。 **使用例** ``` sql SELECT toUUIDOrNull('61f0c404-5cb3-11e7-907b-a6006ad3dba0T') AS uuid ``` 結果: ```response ┌─uuid─┐ │ ᴺᵁᴸᴸ │ └──────┘ ``` ## toUUIDOrZero 文字列型の引数を受け取り、UUIDへの変換を試みます。失敗した場合、ゼロUUIDを返します。 ``` sql toUUIDOrZero(string) ``` **返される値** UUID型の値。 **使用例** ``` sql SELECT toUUIDOrZero('61f0c404-5cb3-11e7-907b-a6006ad3dba0T') AS uuid ``` 結果: ```response ┌─────────────────────────────────uuid─┐ │ 00000000-0000-0000-0000-000000000000 │ └──────────────────────────────────────┘ ``` ## UUIDStringToNum 36文字の形式`xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx`を含む`string`を受け取り、そのバイナリ表現として[FixedString(16)](../data-types/fixedstring.md)を返します。形式はオプションで`variant` (`ビッグエンディアン`がデフォルト)で指定可能です。 **構文** ``` sql UUIDStringToNum(string[, variant = 1]) ``` **引数** - `string` — 36文字の[String](../syntax.md#syntax-string-literal)または[FixedString](../syntax.md#syntax-string-literal)。 - `variant` — [RFC4122](https://datatracker.ietf.org/doc/html/rfc4122#section-4.1.1)に基づくバリアントを表す整数。1 = `ビッグエンディアン` (デフォルト), 2 = `マイクロソフト`。 **返される値** FixedString(16) **使用例** ``` sql SELECT '612f3c40-5d3b-217e-707b-6a546a3d7b29' AS uuid, UUIDStringToNum(uuid) AS bytes ``` 結果: ```response ┌─uuid─────────────────────────────────┬─bytes────────────┐ │ 612f3c40-5d3b-217e-707b-6a546a3d7b29 │ a/<@];!~p{jTj={) │ └──────────────────────────────────────┴──────────────────┘ ``` ``` sql SELECT '612f3c40-5d3b-217e-707b-6a546a3d7b29' AS uuid, UUIDStringToNum(uuid, 2) AS bytes ``` 結果: ```response ┌─uuid─────────────────────────────────┬─bytes────────────┐ │ 612f3c40-5d3b-217e-707b-6a546a3d7b29 │ @