This is an automated email from the ASF dual-hosted git repository.
critas pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/iotdb-docs.git
The following commit(s) were added to refs/heads/main by this push:
new cc87cf77 add format function in table model (#682)
cc87cf77 is described below
commit cc87cf77ba838705e9646c6b955c0be63d4a8b12
Author: leto-b <[email protected]>
AuthorDate: Tue Apr 1 11:19:59 2025 +0800
add format function in table model (#682)
* add format function in table model
* fix subtitle
---
.../Master/Table/SQL-Manual/Basis-Function.md | 186 ++++++++++++++++++++
.../latest-Table/SQL-Manual/Basis-Function.md | 186 ++++++++++++++++++++
.../Master/Table/SQL-Manual/Basis-Function.md | 190 +++++++++++++++++++++
.../latest-Table/SQL-Manual/Basis-Function.md | 190 +++++++++++++++++++++
4 files changed, 752 insertions(+)
diff --git a/src/UserGuide/Master/Table/SQL-Manual/Basis-Function.md
b/src/UserGuide/Master/Table/SQL-Manual/Basis-Function.md
index a56825fa..4ecb0248 100644
--- a/src/UserGuide/Master/Table/SQL-Manual/Basis-Function.md
+++ b/src/UserGuide/Master/Table/SQL-Manual/Basis-Function.md
@@ -758,6 +758,192 @@ SELECT *
IN (try_cast('2024-11-27' AS DATE), try_cast('2024-11-28' AS DATE));
```
+### 7.2 Format Function
+
+This function generates and returns a formatted string based on a specified
format string and input arguments. Similar to Java’s `String.format` or C’s
`printf`, it allows developers to construct dynamic string templates using
placeholder syntax. Predefined format specifiers in the template are replaced
precisely with corresponding argument values, producing a complete string that
adheres to specific formatting requirements.
+
+#### 7.2.1 Syntax
+
+```SQL
+format(pattern, ...args) -> STRING
+```
+
+**Parameters**
+
+* `pattern`: A format string containing static text and one or more format
specifiers (e.g., `%s`, `%d`), or any expression returning a `STRING`/`TEXT`
type.
+* `args`: Input arguments to replace format specifiers. Constraints:
+ * Number of arguments ≥ 1.
+ * Multiple arguments must be comma-separated (e.g., `arg1, arg2`).
+ * Total arguments can exceed the number of specifiers in `pattern` but
cannot be fewer, otherwise an exception is triggered.
+
+**Return Value**
+
+* Formatted result string of type `STRING`.
+
+#### 7.2.2 Usage Examples
+
+1. Format Floating-Point Numbers
+ ```SQL
+ IoTDB:database1> SELECT format('%.5f', humidity) FROM table1 WHERE humidity
= 35.4;
+ +--------+
+ | _col0|
+ +--------+
+ |35.40000|
+ +--------+
+ ```
+2. Format Integers
+ ```SQL
+ IoTDB:database1> SELECT format('%03d', 8) FROM table1 LIMIT 1;
+ +-----+
+ |_col0|
+ +-----+
+ | 008|
+ +-----+
+ ```
+3. Format Dates and Timestamps
+
+* Locale-Specific Date
+
+```SQL
+IoTDB:database1> SELECT format('%1$tA, %1$tB %1$te, %1$tY', 2024-01-01) FROM
table1 LIMIT 1;
++--------------------+
+| _col0|
++--------------------+
+|Monday, January 1, 2024|
++--------------------+
+```
+
+* Remove Timezone Information
+
+```SQL
+IoTDB:database1> SELECT format('%1$tY-%1$tm-%1$td %1$tH:%1$tM:%1$tS.%1$tL',
2024-01-01T00:00:00.000+08:00) FROM table1 LIMIT 1;
++-----------------------+
+| _col0|
++-----------------------+
+|2024-01-01 00:00:00.000|
++-----------------------+
+```
+
+* Second-Level Timestamp Precision
+
+```SQL
+IoTDB:database1> SELECT format('%1$tF %1$tT', 2024-01-01T00:00:00.000+08:00)
FROM table1 LIMIT 1;
++-------------------+
+| _col0|
++-------------------+
+|2024-01-01 00:00:00|
++-------------------+
+```
+
+* Date/Time Format Symbols
+
+| **Symbol** | ** Description**
|
+| ------------------ |
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
+| 'H' | 24-hour format (two digits, zero-padded), i.e. 00 - 23
|
+| 'I' | 12-hour format (two digits, zero-padded), i.e. 01 - 12
|
+| 'k' | 24-hour format (no padding), i.e. 0 - 23
|
+| 'l' | 12-hour format (no padding), i.e. 1 - 12
|
+| 'M' | Minute (two digits, zero-padded), i.e. 00 - 59
|
+| 'S' | Second (two digits, zero-padded; supports leap seconds),
i.e. 00 - 60
|
+| 'L' | Millisecond (three digits, zero-padded), i.e. 000 - 999
|
+| 'N' | Nanosecond (nine digits, zero-padded), i.e. 000000000 -
999999999。
|
+| 'p' | Locale-specific lowercase AM/PM marker (e.g., "am",
"pm"). Prefix with`T`to force uppercase (e.g., "AM").
|
+| 'z' | RFC 822 timezone offset from GMT (e.g.,`-0800`). Adjusts
for daylight saving. Uses the JVM's default timezone for`long`/`Long`/`Date`.
|
+| 'Z' | Timezone abbreviation (e.g., "PST"). Adjusts for daylight
saving. Uses the JVM's default timezone; Formatter's timezone overrides the
argument's timezone if specified. |
+| 's' | Seconds since Unix epoch (1970-01-01 00:00:00 UTC), i.e.
Long.MIN\_VALUE/1000 to Long.MAX\_VALUE/1000。
|
+| 'Q' | Milliseconds since Unix epoch, i.e. Long.MIN\_VALUE 至
Long.MAX\_VALUE。
|
+
+* Common Date/Time Conversion Characters
+
+| **Symbol** | ** Description**
|
+| ---------------- |
-------------------------------------------------------------------- |
+| 'B' | Locale-specific full month name, for example "January",
"February" |
+| 'b' | Locale-specific abbreviated month name, for example "Jan",
"Feb" |
+| 'h' | Same as`b`
|
+| 'A' | Locale-specific full weekday name, for example "Sunday",
"Monday" |
+| 'a' | Locale-specific short weekday name, for example "Sun",
"Mon" |
+| 'C' | Year divided by 100 (two digits, zero-padded)
|
+| 'Y' | Year (minimum 4 digits, zero-padded)
|
+| 'y' | Last two digits of year (zero-padded)
|
+| 'j' | Day of year (three digits, zero-padded)
|
+| 'm' | Month (two digits, zero-padded)
|
+| 'd' | Day of month (two digits, zero-padded)
|
+| 'e' | Day of month (no padding)
|
+
+4. Format Strings
+ ```SQL
+ IoTDB:database1> SELECT format('The measurement status is: %s', status)
FROM table2 LIMIT 1;
+ +-------------------------------+
+ | _col0|
+ +-------------------------------+
+ |The measurement status is: true|
+ +-------------------------------+
+ ```
+5. Format Percentage Sign
+ ```SQL
+ IoTDB:database1> SELECT format('%s%%', 99.9) FROM table1 LIMIT 1;
+ +-----+
+ |_col0|
+ +-----+
+ |99.9%|
+ +-----+
+ ```
+
+#### 7.2.3 Format Conversion Failure Scenarios
+
+1. Type Mismatch Errors
+
+* Timestamp Type Conflict
+
+ If the format specifier includes time-related tokens (e.g., `%Y-%m-%d`) but
the argument:
+
+ * Is a non-`DATE`/`TIMESTAMP` type value. ◦
+ * Requires sub-day precision (e.g., `%H`, `%M`) but the argument is not
`TIMESTAMP`.
+
+```SQL
+-- Example 1
+IoTDB:database1> SELECT format('%1$tA, %1$tB %1$te, %1$tY', humidity) from
table2 limit 1
+Msg: org.apache.iotdb.jdbc.IoTDBSQLException: 701: Invalid format string:
%1$tA, %1$tB %1$te, %1$tY (IllegalFormatConversion: A != java.lang.Float)
+
+-- Example 2
+IoTDB:database1> SELECT format('%1$tY-%1$tm-%1$td %1$tH:%1$tM:%1$tS.%1$tL',
humidity) from table1 limit 1
+Msg: org.apache.iotdb.jdbc.IoTDBSQLException: 701: Invalid format string:
%1$tY-%1$tm-%1$td %1$tH:%1$tM:%1$tS.%1$tL (IllegalFormatConversion: Y !=
java.lang.Float)
+```
+
+* Floating-Point Type Conflict
+
+ Using `%f` with non-numeric arguments (e.g., strings or booleans):
+
+```SQL
+IoTDB:database1> select format('%.5f',status) from table1 where humidity = 35.4
+Msg: org.apache.iotdb.jdbc.IoTDBSQLException: 701: Invalid format string: %.5f
(IllegalFormatConversion: f != java.lang.Boolean)
+```
+
+2. Argument Count Mismatch
+ The number of arguments must equal or exceed the number of format
specifiers.
+
+ ```SQL
+ IoTDB:database1> SELECT format('%.5f %03d', humidity) FROM table1 WHERE
humidity = 35.4;
+ Msg: org.apache.iotdb.jdbc.IoTDBSQLException: 701: Invalid format string:
%.5f %03d (MissingFormatArgument: Format specifier '%03d')
+ ```
+3. Invalid Invocation Errors
+
+ Triggered if:
+
+ * Total arguments < 2 (must include `pattern` and at least one argument).•
+ * `pattern` is not of type `STRING`/`TEXT`.
+
+```SQL
+-- Example 1
+IoTDB:database1> select format('%s') from table1 limit 1
+Msg: org.apache.iotdb.jdbc.IoTDBSQLException: 701: Scalar function format must
have at least two arguments, and first argument pattern must be TEXT or STRING
type.
+
+--Example 2
+IoTDB:database1> select format(123, humidity) from table1 limit 1
+Msg: org.apache.iotdb.jdbc.IoTDBSQLException: 701: Scalar function format must
have at least two arguments, and first argument pattern must be TEXT or STRING
type.
+```
+
+
## 8. String Functions and Operators
### 8.1 String operators
diff --git a/src/UserGuide/latest-Table/SQL-Manual/Basis-Function.md
b/src/UserGuide/latest-Table/SQL-Manual/Basis-Function.md
index a56825fa..4ecb0248 100644
--- a/src/UserGuide/latest-Table/SQL-Manual/Basis-Function.md
+++ b/src/UserGuide/latest-Table/SQL-Manual/Basis-Function.md
@@ -758,6 +758,192 @@ SELECT *
IN (try_cast('2024-11-27' AS DATE), try_cast('2024-11-28' AS DATE));
```
+### 7.2 Format Function
+
+This function generates and returns a formatted string based on a specified
format string and input arguments. Similar to Java’s `String.format` or C’s
`printf`, it allows developers to construct dynamic string templates using
placeholder syntax. Predefined format specifiers in the template are replaced
precisely with corresponding argument values, producing a complete string that
adheres to specific formatting requirements.
+
+#### 7.2.1 Syntax
+
+```SQL
+format(pattern, ...args) -> STRING
+```
+
+**Parameters**
+
+* `pattern`: A format string containing static text and one or more format
specifiers (e.g., `%s`, `%d`), or any expression returning a `STRING`/`TEXT`
type.
+* `args`: Input arguments to replace format specifiers. Constraints:
+ * Number of arguments ≥ 1.
+ * Multiple arguments must be comma-separated (e.g., `arg1, arg2`).
+ * Total arguments can exceed the number of specifiers in `pattern` but
cannot be fewer, otherwise an exception is triggered.
+
+**Return Value**
+
+* Formatted result string of type `STRING`.
+
+#### 7.2.2 Usage Examples
+
+1. Format Floating-Point Numbers
+ ```SQL
+ IoTDB:database1> SELECT format('%.5f', humidity) FROM table1 WHERE humidity
= 35.4;
+ +--------+
+ | _col0|
+ +--------+
+ |35.40000|
+ +--------+
+ ```
+2. Format Integers
+ ```SQL
+ IoTDB:database1> SELECT format('%03d', 8) FROM table1 LIMIT 1;
+ +-----+
+ |_col0|
+ +-----+
+ | 008|
+ +-----+
+ ```
+3. Format Dates and Timestamps
+
+* Locale-Specific Date
+
+```SQL
+IoTDB:database1> SELECT format('%1$tA, %1$tB %1$te, %1$tY', 2024-01-01) FROM
table1 LIMIT 1;
++--------------------+
+| _col0|
++--------------------+
+|Monday, January 1, 2024|
++--------------------+
+```
+
+* Remove Timezone Information
+
+```SQL
+IoTDB:database1> SELECT format('%1$tY-%1$tm-%1$td %1$tH:%1$tM:%1$tS.%1$tL',
2024-01-01T00:00:00.000+08:00) FROM table1 LIMIT 1;
++-----------------------+
+| _col0|
++-----------------------+
+|2024-01-01 00:00:00.000|
++-----------------------+
+```
+
+* Second-Level Timestamp Precision
+
+```SQL
+IoTDB:database1> SELECT format('%1$tF %1$tT', 2024-01-01T00:00:00.000+08:00)
FROM table1 LIMIT 1;
++-------------------+
+| _col0|
++-------------------+
+|2024-01-01 00:00:00|
++-------------------+
+```
+
+* Date/Time Format Symbols
+
+| **Symbol** | ** Description**
|
+| ------------------ |
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
+| 'H' | 24-hour format (two digits, zero-padded), i.e. 00 - 23
|
+| 'I' | 12-hour format (two digits, zero-padded), i.e. 01 - 12
|
+| 'k' | 24-hour format (no padding), i.e. 0 - 23
|
+| 'l' | 12-hour format (no padding), i.e. 1 - 12
|
+| 'M' | Minute (two digits, zero-padded), i.e. 00 - 59
|
+| 'S' | Second (two digits, zero-padded; supports leap seconds),
i.e. 00 - 60
|
+| 'L' | Millisecond (three digits, zero-padded), i.e. 000 - 999
|
+| 'N' | Nanosecond (nine digits, zero-padded), i.e. 000000000 -
999999999。
|
+| 'p' | Locale-specific lowercase AM/PM marker (e.g., "am",
"pm"). Prefix with`T`to force uppercase (e.g., "AM").
|
+| 'z' | RFC 822 timezone offset from GMT (e.g.,`-0800`). Adjusts
for daylight saving. Uses the JVM's default timezone for`long`/`Long`/`Date`.
|
+| 'Z' | Timezone abbreviation (e.g., "PST"). Adjusts for daylight
saving. Uses the JVM's default timezone; Formatter's timezone overrides the
argument's timezone if specified. |
+| 's' | Seconds since Unix epoch (1970-01-01 00:00:00 UTC), i.e.
Long.MIN\_VALUE/1000 to Long.MAX\_VALUE/1000。
|
+| 'Q' | Milliseconds since Unix epoch, i.e. Long.MIN\_VALUE 至
Long.MAX\_VALUE。
|
+
+* Common Date/Time Conversion Characters
+
+| **Symbol** | ** Description**
|
+| ---------------- |
-------------------------------------------------------------------- |
+| 'B' | Locale-specific full month name, for example "January",
"February" |
+| 'b' | Locale-specific abbreviated month name, for example "Jan",
"Feb" |
+| 'h' | Same as`b`
|
+| 'A' | Locale-specific full weekday name, for example "Sunday",
"Monday" |
+| 'a' | Locale-specific short weekday name, for example "Sun",
"Mon" |
+| 'C' | Year divided by 100 (two digits, zero-padded)
|
+| 'Y' | Year (minimum 4 digits, zero-padded)
|
+| 'y' | Last two digits of year (zero-padded)
|
+| 'j' | Day of year (three digits, zero-padded)
|
+| 'm' | Month (two digits, zero-padded)
|
+| 'd' | Day of month (two digits, zero-padded)
|
+| 'e' | Day of month (no padding)
|
+
+4. Format Strings
+ ```SQL
+ IoTDB:database1> SELECT format('The measurement status is: %s', status)
FROM table2 LIMIT 1;
+ +-------------------------------+
+ | _col0|
+ +-------------------------------+
+ |The measurement status is: true|
+ +-------------------------------+
+ ```
+5. Format Percentage Sign
+ ```SQL
+ IoTDB:database1> SELECT format('%s%%', 99.9) FROM table1 LIMIT 1;
+ +-----+
+ |_col0|
+ +-----+
+ |99.9%|
+ +-----+
+ ```
+
+#### 7.2.3 Format Conversion Failure Scenarios
+
+1. Type Mismatch Errors
+
+* Timestamp Type Conflict
+
+ If the format specifier includes time-related tokens (e.g., `%Y-%m-%d`) but
the argument:
+
+ * Is a non-`DATE`/`TIMESTAMP` type value. ◦
+ * Requires sub-day precision (e.g., `%H`, `%M`) but the argument is not
`TIMESTAMP`.
+
+```SQL
+-- Example 1
+IoTDB:database1> SELECT format('%1$tA, %1$tB %1$te, %1$tY', humidity) from
table2 limit 1
+Msg: org.apache.iotdb.jdbc.IoTDBSQLException: 701: Invalid format string:
%1$tA, %1$tB %1$te, %1$tY (IllegalFormatConversion: A != java.lang.Float)
+
+-- Example 2
+IoTDB:database1> SELECT format('%1$tY-%1$tm-%1$td %1$tH:%1$tM:%1$tS.%1$tL',
humidity) from table1 limit 1
+Msg: org.apache.iotdb.jdbc.IoTDBSQLException: 701: Invalid format string:
%1$tY-%1$tm-%1$td %1$tH:%1$tM:%1$tS.%1$tL (IllegalFormatConversion: Y !=
java.lang.Float)
+```
+
+* Floating-Point Type Conflict
+
+ Using `%f` with non-numeric arguments (e.g., strings or booleans):
+
+```SQL
+IoTDB:database1> select format('%.5f',status) from table1 where humidity = 35.4
+Msg: org.apache.iotdb.jdbc.IoTDBSQLException: 701: Invalid format string: %.5f
(IllegalFormatConversion: f != java.lang.Boolean)
+```
+
+2. Argument Count Mismatch
+ The number of arguments must equal or exceed the number of format
specifiers.
+
+ ```SQL
+ IoTDB:database1> SELECT format('%.5f %03d', humidity) FROM table1 WHERE
humidity = 35.4;
+ Msg: org.apache.iotdb.jdbc.IoTDBSQLException: 701: Invalid format string:
%.5f %03d (MissingFormatArgument: Format specifier '%03d')
+ ```
+3. Invalid Invocation Errors
+
+ Triggered if:
+
+ * Total arguments < 2 (must include `pattern` and at least one argument).•
+ * `pattern` is not of type `STRING`/`TEXT`.
+
+```SQL
+-- Example 1
+IoTDB:database1> select format('%s') from table1 limit 1
+Msg: org.apache.iotdb.jdbc.IoTDBSQLException: 701: Scalar function format must
have at least two arguments, and first argument pattern must be TEXT or STRING
type.
+
+--Example 2
+IoTDB:database1> select format(123, humidity) from table1 limit 1
+Msg: org.apache.iotdb.jdbc.IoTDBSQLException: 701: Scalar function format must
have at least two arguments, and first argument pattern must be TEXT or STRING
type.
+```
+
+
## 8. String Functions and Operators
### 8.1 String operators
diff --git a/src/zh/UserGuide/Master/Table/SQL-Manual/Basis-Function.md
b/src/zh/UserGuide/Master/Table/SQL-Manual/Basis-Function.md
index b0ab5ca9..044fb381 100644
--- a/src/zh/UserGuide/Master/Table/SQL-Manual/Basis-Function.md
+++ b/src/zh/UserGuide/Master/Table/SQL-Manual/Basis-Function.md
@@ -755,6 +755,196 @@ SELECT *
IN (try_cast('2024-11-27' AS DATE), try_cast('2024-11-28' AS DATE));
```
+### 7.2 Format 函数
+该函数基于指定的格式字符串与输入参数,生成并返回格式化后的字符串输出。其功能与 Java 语言中的`String.format` 方法及 C
语言中的`printf`函数相类似,支持开发者通过占位符语法构建动态字符串模板,其中预设的格式标识符将被传入的对应参数值精准替换,最终形成符合特定格式要求的完整字符串。
+
+#### 7.2.1 语法介绍
+
+```SQL
+format(pattern,...args) -> String
+```
+
+**参数定义**
+
+* `pattern`: 格式字符串,可包含静态文本及一个或多个格式说明符(如 `%s`, `%d` 等),或任意返回类型为 `STRING/TEXT`
的表达式。
+* `args`: 用于替换格式说明符的输入参数。需满足以下条件:
+ * 参数数量 ≥ 1
+ * 若存在多个参数,以逗号`,`分隔(如 `arg1,arg2`)
+ * 参数总数可多于 `pattern` 中的占位符数量,但不可少于,否则触发异常
+
+**返回值**
+
+* 类型为 `STRING` 的格式化结果字符串
+
+#### 7.2.2 使用示例
+
+1. 格式化浮点数
+
+```SQL
+IoTDB:database1> select format('%.5f',humidity) from table1 where humidity =
35.4
++--------+
+| _col0|
++--------+
+|35.40000|
++--------+
+```
+
+2. 格式化整数
+
+```SQL
+IoTDB:database1> select format('%03d',8) from table1 limit 1
++-----+
+|_col0|
++-----+
+| 008|
++-----+
+```
+
+3. 格式化日期和时间戳
+
+* Locale-specific日期
+
+```SQL
+IoTDB:database1> SELECT format('%1$tA, %1$tB %1$te, %1$tY', 2024-01-01) from
table1 limit 1
++--------------------+
+| _col0|
++--------------------+
+|星期一, 一月 1, 2024|
++--------------------+
+```
+
+* 去除时区信息
+
+```SQL
+IoTDB:database1> SELECT format('%1$tY-%1$tm-%1$td %1$tH:%1$tM:%1$tS.%1$tL',
2024-01-01T00:00:00.000+08:00) from table1 limit 1
++-----------------------+
+| _col0|
++-----------------------+
+|2024-01-01 00:00:00.000|
++-----------------------+
+```
+
+* 获取秒级时间戳精度
+
+```SQL
+IoTDB:database1> SELECT format('%1$tF %1$tT', 2024-01-01T00:00:00.000+08:00)
from table1 limit 1
++-------------------+
+| _col0|
++-------------------+
+|2024-01-01 00:00:00|
++-------------------+
+```
+
+* 日期符号说明如下
+
+| **符号** | ** 描述**
|
+| ---------------- |
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
+| 'H' | 24 小时制的小时数,格式为两位数,必要时加上前导零,i.e. 00 - 23。
|
+| 'I' | 12 小时制的小时数,格式为两位数,必要时加上前导零,i.e. 01 - 12。
|
+| 'k' | 24 小时制的小时数,i.e. 0 - 23。
|
+| 'l' | 12 小时制的小时数,i.e. 1 - 12。
|
+| 'M' | 小时内的分钟,格式为两位数,必要时加上前导零,i.e. 00 - 59。
|
+| 'S' | 分钟内的秒数,格式为两位数,必要时加上前导零,i.e. 00 - 60(“60 ”是支持闰秒所需的特殊值)。
|
+| 'L' | 秒内毫秒,格式为三位数,必要时加前导零,i.e. 000 - 999。
|
+| 'N' | 秒内的纳秒,格式为九位数,必要时加前导零,i.e. 000000000 - 999999999。
|
+| 'p' |
当地特定的[上午或下午](https://docs.oracle.com/en/java/javase/23/docs/api/java.base/java/text/DateFormatSymbols.html#getAmPmStrings())标记,小写,如
“am ”或 “pm”。使用转换前缀 “T ”会强制输出为大写。
|
+| 'z' | 从格林尼治标准时间偏移的[RFC
822](http://www.ietf.org/rfc/rfc0822.txt)式数字时区,例如 -0800。该值将根据夏令时的需要进行调整。对于
long、[Long](https://docs.oracle.com/en/java/javase/23/docs/api/java.base/java/lang/Long.html)和[Date](https://docs.oracle.com/en/java/javase/23/docs/api/java.base/java/util/Date.html),使用的时区是
Java
虚拟机此实例的[默认时区](https://docs.oracle.com/en/java/javase/23/docs/api/java.base/java/util/TimeZone.html#getDefault())。
|
+| 'Z' | 表示时区缩写的字符串。该值将根据夏令时的需要进行调整。对于
long、[Long](https://docs.oracle.com/en/java/javase/23/docs/api/java.base/java/lang/Long.html)和[Date](https://docs.oracle.com/en/java/javase/23/docs/api/java.base/java/util/Date.html),使用的时区是此
Java
虚拟机实例的[默认时区](https://docs.oracle.com/en/java/javase/23/docs/api/java.base/java/util/TimeZone.html#getDefault())。Formatter
的时区将取代参数的时区(如果有)。 |
+| 's' | 自 1970 年 1 月 1 日 00:00:00 UTC 开始的纪元起的秒数,i.e.
Long.MIN\_VALUE/1000 至 Long.MAX\_VALUE/1000。
|
+| 'Q' | 自 1970 年 1 月 1 日 00:00:00 UTC 开始的纪元起的毫秒数,i.e.
Long.MIN\_VALUE 至 Long.MAX\_VALUE。
|
+
+* 用于格式化常见的日期/时间组成的转换字符说明如下
+
+| **符号** | **描述**
|
+| ---------------- |
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
+| 'B' |
特定于区域设置[的完整月份名称](https://docs.oracle.com/en/java/javase/23/docs/api/java.base/java/text/DateFormatSymbols.html#getMonths()),例如
“January”、“February”。 |
+| 'b' | 当地特定月份的缩写名称,如"1 月"、"2 月"。
|
+| 'h' | 与"b "相同。
|
+| 'A' | 一周中某一天在当地的全称,如"星期日"、"星期一"。
|
+| 'a' | 当地特有的星期简短名称,例如"星期日"、"星期一
|
+| 'C' | 四位数年份除以100,格式为两位数,必要时加上前导零,即00 - 99
|
+| 'Y' | 年份,格式为至少四位数,必要时加上前导零,例如0092相当于公历92年。
|
+| 'y' | 年份的最后两位数,格式为必要的前导零,即00 - 99。
|
+| 'j' | 年号,格式为三位数,必要时加前导零,例如公历为001 - 366。
|
+| 'm' | 月份,格式为两位数,必要时加前导零,即01 - 13。
|
+| 'd' | 月日,格式为两位数,必要时加前导零,即01 - 31
|
+| 'e' | 月日,格式为两位数,即1 - 31。
|
+
+4. 格式化字符串
+
+```SQL
+IoTDB:database1> SELECT format('The measurement status is :%s',status) FROM
table2 limit 1
++-------------------------------+
+| _col0|
++-------------------------------+
+|The measurement status is :true|
++-------------------------------+
+```
+
+5. 格式化百分号
+
+```SQL
+IoTDB:database1> SELECT format('%s%%', 99.9) from table1 limit 1
++-----+
+|_col0|
++-----+
+|99.9%|
++-----+
+```
+
+#### 7.2.3 **格式转换失败场景说明**
+
+1. 类型不匹配错误
+
+* 时间戳类型冲突 若格式说明符中包含时间相关标记(如 `%Y-%m-%d`),但参数提供:
+ * 非 `DATE`/`TIMESTAMP` 类型值
+ * 或涉及日期细粒度单位(如 `%H` 小时、`%M` 分钟)时,参数仅支持 `TIMESTAMP` 类型,否则将抛出类型异常
+
+```SQL
+-- 示例1
+IoTDB:database1> SELECT format('%1$tA, %1$tB %1$te, %1$tY', humidity) from
table2 limit 1
+Msg: org.apache.iotdb.jdbc.IoTDBSQLException: 701: Invalid format string:
%1$tA, %1$tB %1$te, %1$tY (IllegalFormatConversion: A != java.lang.Float)
+
+-- 示例2
+IoTDB:database1> SELECT format('%1$tY-%1$tm-%1$td %1$tH:%1$tM:%1$tS.%1$tL',
humidity) from table1 limit 1
+Msg: org.apache.iotdb.jdbc.IoTDBSQLException: 701: Invalid format string:
%1$tY-%1$tm-%1$td %1$tH:%1$tM:%1$tS.%1$tL (IllegalFormatConversion: Y !=
java.lang.Float)
+```
+
+* 浮点数类型冲突 若使用 `%f` 等浮点格式说明符,但参数提供非数值类型(如字符串、布尔值),将触发类型转换错误
+
+```SQL
+IoTDB:database1> select format('%.5f',status) from table1 where humidity = 35.4
+Msg: org.apache.iotdb.jdbc.IoTDBSQLException: 701: Invalid format string: %.5f
(IllegalFormatConversion: f != java.lang.Boolean)
+```
+
+2. 参数数量不匹配错误
+
+* 实际提供的参数数量 必须等于或大于 格式字符串中格式说明符的数量
+* 若参数数量少于格式说明符数量,将抛出 `ArgumentCountMismatch` 异常
+
+```SQL
+IoTDB:database1> select format('%.5f %03d', humidity) from table1 where
humidity = 35.4
+Msg: org.apache.iotdb.jdbc.IoTDBSQLException: 701: Invalid format string: %.5f
%03d (MissingFormatArgument: Format specifier '%03d')
+```
+
+3. 无效调用错误
+
+* 当函数参数满足以下任一条件时,视为非法调用:
+ * 参数总数 小于 2(必须包含格式字符串及至少一个参数)
+ * 格式字符串(`pattern`)类型非 `STRING/TEXT`
+
+```SQL
+-- 示例1
+IoTDB:database1> select format('%s') from table1 limit 1
+Msg: org.apache.iotdb.jdbc.IoTDBSQLException: 701: Scalar function format must
have at least two arguments, and first argument pattern must be TEXT or STRING
type.
+
+--示例2
+IoTDB:database1> select format(123, humidity) from table1 limit 1
+Msg: org.apache.iotdb.jdbc.IoTDBSQLException: 701: Scalar function format must
have at least two arguments, and first argument pattern must be TEXT or STRING
type.
+```
+
+
+
## 8. 字符串函数和操作符
### 8.1 字符串操作符
diff --git a/src/zh/UserGuide/latest-Table/SQL-Manual/Basis-Function.md
b/src/zh/UserGuide/latest-Table/SQL-Manual/Basis-Function.md
index b0ab5ca9..044fb381 100644
--- a/src/zh/UserGuide/latest-Table/SQL-Manual/Basis-Function.md
+++ b/src/zh/UserGuide/latest-Table/SQL-Manual/Basis-Function.md
@@ -755,6 +755,196 @@ SELECT *
IN (try_cast('2024-11-27' AS DATE), try_cast('2024-11-28' AS DATE));
```
+### 7.2 Format 函数
+该函数基于指定的格式字符串与输入参数,生成并返回格式化后的字符串输出。其功能与 Java 语言中的`String.format` 方法及 C
语言中的`printf`函数相类似,支持开发者通过占位符语法构建动态字符串模板,其中预设的格式标识符将被传入的对应参数值精准替换,最终形成符合特定格式要求的完整字符串。
+
+#### 7.2.1 语法介绍
+
+```SQL
+format(pattern,...args) -> String
+```
+
+**参数定义**
+
+* `pattern`: 格式字符串,可包含静态文本及一个或多个格式说明符(如 `%s`, `%d` 等),或任意返回类型为 `STRING/TEXT`
的表达式。
+* `args`: 用于替换格式说明符的输入参数。需满足以下条件:
+ * 参数数量 ≥ 1
+ * 若存在多个参数,以逗号`,`分隔(如 `arg1,arg2`)
+ * 参数总数可多于 `pattern` 中的占位符数量,但不可少于,否则触发异常
+
+**返回值**
+
+* 类型为 `STRING` 的格式化结果字符串
+
+#### 7.2.2 使用示例
+
+1. 格式化浮点数
+
+```SQL
+IoTDB:database1> select format('%.5f',humidity) from table1 where humidity =
35.4
++--------+
+| _col0|
++--------+
+|35.40000|
++--------+
+```
+
+2. 格式化整数
+
+```SQL
+IoTDB:database1> select format('%03d',8) from table1 limit 1
++-----+
+|_col0|
++-----+
+| 008|
++-----+
+```
+
+3. 格式化日期和时间戳
+
+* Locale-specific日期
+
+```SQL
+IoTDB:database1> SELECT format('%1$tA, %1$tB %1$te, %1$tY', 2024-01-01) from
table1 limit 1
++--------------------+
+| _col0|
++--------------------+
+|星期一, 一月 1, 2024|
++--------------------+
+```
+
+* 去除时区信息
+
+```SQL
+IoTDB:database1> SELECT format('%1$tY-%1$tm-%1$td %1$tH:%1$tM:%1$tS.%1$tL',
2024-01-01T00:00:00.000+08:00) from table1 limit 1
++-----------------------+
+| _col0|
++-----------------------+
+|2024-01-01 00:00:00.000|
++-----------------------+
+```
+
+* 获取秒级时间戳精度
+
+```SQL
+IoTDB:database1> SELECT format('%1$tF %1$tT', 2024-01-01T00:00:00.000+08:00)
from table1 limit 1
++-------------------+
+| _col0|
++-------------------+
+|2024-01-01 00:00:00|
++-------------------+
+```
+
+* 日期符号说明如下
+
+| **符号** | ** 描述**
|
+| ---------------- |
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
+| 'H' | 24 小时制的小时数,格式为两位数,必要时加上前导零,i.e. 00 - 23。
|
+| 'I' | 12 小时制的小时数,格式为两位数,必要时加上前导零,i.e. 01 - 12。
|
+| 'k' | 24 小时制的小时数,i.e. 0 - 23。
|
+| 'l' | 12 小时制的小时数,i.e. 1 - 12。
|
+| 'M' | 小时内的分钟,格式为两位数,必要时加上前导零,i.e. 00 - 59。
|
+| 'S' | 分钟内的秒数,格式为两位数,必要时加上前导零,i.e. 00 - 60(“60 ”是支持闰秒所需的特殊值)。
|
+| 'L' | 秒内毫秒,格式为三位数,必要时加前导零,i.e. 000 - 999。
|
+| 'N' | 秒内的纳秒,格式为九位数,必要时加前导零,i.e. 000000000 - 999999999。
|
+| 'p' |
当地特定的[上午或下午](https://docs.oracle.com/en/java/javase/23/docs/api/java.base/java/text/DateFormatSymbols.html#getAmPmStrings())标记,小写,如
“am ”或 “pm”。使用转换前缀 “T ”会强制输出为大写。
|
+| 'z' | 从格林尼治标准时间偏移的[RFC
822](http://www.ietf.org/rfc/rfc0822.txt)式数字时区,例如 -0800。该值将根据夏令时的需要进行调整。对于
long、[Long](https://docs.oracle.com/en/java/javase/23/docs/api/java.base/java/lang/Long.html)和[Date](https://docs.oracle.com/en/java/javase/23/docs/api/java.base/java/util/Date.html),使用的时区是
Java
虚拟机此实例的[默认时区](https://docs.oracle.com/en/java/javase/23/docs/api/java.base/java/util/TimeZone.html#getDefault())。
|
+| 'Z' | 表示时区缩写的字符串。该值将根据夏令时的需要进行调整。对于
long、[Long](https://docs.oracle.com/en/java/javase/23/docs/api/java.base/java/lang/Long.html)和[Date](https://docs.oracle.com/en/java/javase/23/docs/api/java.base/java/util/Date.html),使用的时区是此
Java
虚拟机实例的[默认时区](https://docs.oracle.com/en/java/javase/23/docs/api/java.base/java/util/TimeZone.html#getDefault())。Formatter
的时区将取代参数的时区(如果有)。 |
+| 's' | 自 1970 年 1 月 1 日 00:00:00 UTC 开始的纪元起的秒数,i.e.
Long.MIN\_VALUE/1000 至 Long.MAX\_VALUE/1000。
|
+| 'Q' | 自 1970 年 1 月 1 日 00:00:00 UTC 开始的纪元起的毫秒数,i.e.
Long.MIN\_VALUE 至 Long.MAX\_VALUE。
|
+
+* 用于格式化常见的日期/时间组成的转换字符说明如下
+
+| **符号** | **描述**
|
+| ---------------- |
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
+| 'B' |
特定于区域设置[的完整月份名称](https://docs.oracle.com/en/java/javase/23/docs/api/java.base/java/text/DateFormatSymbols.html#getMonths()),例如
“January”、“February”。 |
+| 'b' | 当地特定月份的缩写名称,如"1 月"、"2 月"。
|
+| 'h' | 与"b "相同。
|
+| 'A' | 一周中某一天在当地的全称,如"星期日"、"星期一"。
|
+| 'a' | 当地特有的星期简短名称,例如"星期日"、"星期一
|
+| 'C' | 四位数年份除以100,格式为两位数,必要时加上前导零,即00 - 99
|
+| 'Y' | 年份,格式为至少四位数,必要时加上前导零,例如0092相当于公历92年。
|
+| 'y' | 年份的最后两位数,格式为必要的前导零,即00 - 99。
|
+| 'j' | 年号,格式为三位数,必要时加前导零,例如公历为001 - 366。
|
+| 'm' | 月份,格式为两位数,必要时加前导零,即01 - 13。
|
+| 'd' | 月日,格式为两位数,必要时加前导零,即01 - 31
|
+| 'e' | 月日,格式为两位数,即1 - 31。
|
+
+4. 格式化字符串
+
+```SQL
+IoTDB:database1> SELECT format('The measurement status is :%s',status) FROM
table2 limit 1
++-------------------------------+
+| _col0|
++-------------------------------+
+|The measurement status is :true|
++-------------------------------+
+```
+
+5. 格式化百分号
+
+```SQL
+IoTDB:database1> SELECT format('%s%%', 99.9) from table1 limit 1
++-----+
+|_col0|
++-----+
+|99.9%|
++-----+
+```
+
+#### 7.2.3 **格式转换失败场景说明**
+
+1. 类型不匹配错误
+
+* 时间戳类型冲突 若格式说明符中包含时间相关标记(如 `%Y-%m-%d`),但参数提供:
+ * 非 `DATE`/`TIMESTAMP` 类型值
+ * 或涉及日期细粒度单位(如 `%H` 小时、`%M` 分钟)时,参数仅支持 `TIMESTAMP` 类型,否则将抛出类型异常
+
+```SQL
+-- 示例1
+IoTDB:database1> SELECT format('%1$tA, %1$tB %1$te, %1$tY', humidity) from
table2 limit 1
+Msg: org.apache.iotdb.jdbc.IoTDBSQLException: 701: Invalid format string:
%1$tA, %1$tB %1$te, %1$tY (IllegalFormatConversion: A != java.lang.Float)
+
+-- 示例2
+IoTDB:database1> SELECT format('%1$tY-%1$tm-%1$td %1$tH:%1$tM:%1$tS.%1$tL',
humidity) from table1 limit 1
+Msg: org.apache.iotdb.jdbc.IoTDBSQLException: 701: Invalid format string:
%1$tY-%1$tm-%1$td %1$tH:%1$tM:%1$tS.%1$tL (IllegalFormatConversion: Y !=
java.lang.Float)
+```
+
+* 浮点数类型冲突 若使用 `%f` 等浮点格式说明符,但参数提供非数值类型(如字符串、布尔值),将触发类型转换错误
+
+```SQL
+IoTDB:database1> select format('%.5f',status) from table1 where humidity = 35.4
+Msg: org.apache.iotdb.jdbc.IoTDBSQLException: 701: Invalid format string: %.5f
(IllegalFormatConversion: f != java.lang.Boolean)
+```
+
+2. 参数数量不匹配错误
+
+* 实际提供的参数数量 必须等于或大于 格式字符串中格式说明符的数量
+* 若参数数量少于格式说明符数量,将抛出 `ArgumentCountMismatch` 异常
+
+```SQL
+IoTDB:database1> select format('%.5f %03d', humidity) from table1 where
humidity = 35.4
+Msg: org.apache.iotdb.jdbc.IoTDBSQLException: 701: Invalid format string: %.5f
%03d (MissingFormatArgument: Format specifier '%03d')
+```
+
+3. 无效调用错误
+
+* 当函数参数满足以下任一条件时,视为非法调用:
+ * 参数总数 小于 2(必须包含格式字符串及至少一个参数)
+ * 格式字符串(`pattern`)类型非 `STRING/TEXT`
+
+```SQL
+-- 示例1
+IoTDB:database1> select format('%s') from table1 limit 1
+Msg: org.apache.iotdb.jdbc.IoTDBSQLException: 701: Scalar function format must
have at least two arguments, and first argument pattern must be TEXT or STRING
type.
+
+--示例2
+IoTDB:database1> select format(123, humidity) from table1 limit 1
+Msg: org.apache.iotdb.jdbc.IoTDBSQLException: 701: Scalar function format must
have at least two arguments, and first argument pattern must be TEXT or STRING
type.
+```
+
+
+
## 8. 字符串函数和操作符
### 8.1 字符串操作符