Skip to content

Commit 9e075ca

Browse files
authored
[FLINK-39682] Fix unable to invoke TO_DATE with TIMESTAMP types (#4397)
1 parent 3e1211e commit 9e075ca

6 files changed

Lines changed: 325 additions & 23 deletions

File tree

docs/content.zh/docs/core-concept/transform.md

Lines changed: 22 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -172,27 +172,28 @@ Flink CDC 使用 [Calcite](https://calcite.apache.org/) 来解析表达式并且
172172

173173
## 时间函数
174174

175-
| 函数 | Janino 代码 | 描述 |
176-
|------------------------------------------------------|------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
177-
| LOCALTIME | localtime() | 返回本地时区的当前 SQL 时间,返回类型为 TIME(0)。 |
178-
| LOCALTIMESTAMP | localtimestamp() | 返回本地时区的当前 SQL 时间戳,返回类型为 TIMESTAMP(3)。 |
179-
| CURRENT_TIME | currentTime() | 返回本地时区的当前 SQL 时间,是 LOCAL_TIME 的同义词。 |
180-
| CURRENT_DATE | currentDate() | 返回本地时区的当前 SQL 日期。 |
181-
| CURRENT_TIMESTAMP | currentTimestamp() | 返回本地时区的当前 SQL 时间戳,返回类型为 TIMESTAMP_LTZ(3)。 |
182-
| NOW() | now() | 返回本地时区的当前 SQL 时间戳,是 CURRENT_TIMESTAMP 的同义词。 |
183-
| DATE_FORMAT(timestamp, string) | dateFormat(timestamp, string) | 将时间戳转换为指定日期格式字符串的值。格式字符串与 Java 的 SimpleDateFormat 兼容。 |
184-
| DATE_FORMAT(date, string) | dateFormat(date, string) | 将给定日期转换为指定格式字符串的值。格式字符串与 Java 的 SimpleDateFormat 兼容。 |
185-
| DATE_FORMAT(time, string) | dateFormat(time, string) | 将给定时间转换为指定格式字符串的值。格式字符串与 Java 的 SimpleDateFormat 兼容。 |
186-
| DATE_FORMAT_TZ(timestamp, format, timezone) | dateFormatTz(timestamp, format, timezone) | 使用给定的模式和指定的时区将时间戳或日期时间值格式化为字符串。timezone 参数可以是时区 ID(例如 'UTC'、'Asia/Shanghai')或偏移量(如 '+08:00')。 |
187-
| TIMESTAMPADD(timeintervalunit, interval, timepoint) | timestampadd(timeintervalunit, interval, timepoint) | 返回 timepoint 加上 interval 后的时间戳。时间间隔的单位由第一个参数指定,应为以下值之一:SECOND、MINUTE、HOUR、DAY、MONTH 或 YEAR。 |
188-
| TIMESTAMPDIFF(timepointunit, timepoint1, timepoint2) | timestampDiff(timepointunit, timepoint1, timepoint2) | 返回 timepoint1 和 timepoint2 之间的(有符号)时间单位数。时间间隔的单位由第一个参数指定,应为以下值之一:SECOND、MINUTE、HOUR、DAY、MONTH 或 YEAR。 |
189-
| TO_DATE(string1[, string2]) | toDate(string1[, string2]) | 将日期字符串 string1 按格式 string2(默认为 'yyyy-MM-dd')转换为日期。 |
190-
| TO_TIMESTAMP(string1[, string2]) | toTimestamp(string1[, string2]) | 将日期时间字符串 string1 按格式 string2(默认为 'yyyy-MM-dd HH:mm:ss')转换为时间戳,不带时区。 |
191-
| TO_TIMESTAMP_LTZ(string1[, string2]) | toTimestampLtz(string1[, string2]) | 将日期时间字符串 string1 按格式 string2(默认为 'yyyy-MM-dd HH:mm:ss')转换为时间戳,带本地时区。 |
192-
| FROM_UNIXTIME(numeric[, string]) | fromUnixtime(NUMERIC[, STRING]) | 返回 numeric 参数的字符串格式表示(默认为 'yyyy-MM-dd HH:mm:ss')。numeric 是表示自 '1970-01-01 00:00:00' UTC 以来秒数的内部时间戳值,例如由 UNIX_TIMESTAMP() 函数产生的值。返回值以会话时区(在 TableConfig 中指定)表示。例如,如果在 UTC 时区,FROM_UNIXTIME(44) 返回 '1970-01-01 00:00:44',但如果在 'Asia/Tokyo' 时区则返回 '1970-01-01 09:00:44'。 |
193-
| UNIX_TIMESTAMP() | unixTimestamp() | 获取当前 Unix 时间戳(秒)。此函数是非确定性的,意味着每条记录都会重新计算该值。 |
194-
| UNIX_TIMESTAMP(string1[, string2]) | unixTimestamp(STRING1[, STRING2]) | 将日期时间字符串 string1 按格式 string2(如果未指定,默认为 yyyy-MM-dd HH:mm:ss)转换为 Unix 时间戳(秒),使用表配置中指定的时区。<br/>如果日期时间字符串中指定了时区并以 UTC+X 格式(如 "yyyy-MM-dd HH:mm:ss.SSS X")解析,则此函数将使用日期时间字符串中指定的时区而不是表配置中的时区。如果无法解析日期时间字符串,将返回默认值 Long.MIN_VALUE(-9223372036854775808)。 |
195-
| DATE_ADD(date, int) | dateAdd(date, int) | 将 N 天添加到给定日期,返回格式为 'yyyy-MM-dd' 的字符串。 |
175+
| 函数 | Janino 代码 | 描述 |
176+
|------------------------------------------------------|------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
177+
| LOCALTIME | localtime() | 返回本地时区的当前 SQL 时间,返回类型为 TIME(0)。 |
178+
| LOCALTIMESTAMP | localtimestamp() | 返回本地时区的当前 SQL 时间戳,返回类型为 TIMESTAMP(3)。 |
179+
| CURRENT_TIME | currentTime() | 返回本地时区的当前 SQL 时间,是 LOCAL_TIME 的同义词。 |
180+
| CURRENT_DATE | currentDate() | 返回本地时区的当前 SQL 日期。 |
181+
| CURRENT_TIMESTAMP | currentTimestamp() | 返回本地时区的当前 SQL 时间戳,返回类型为 TIMESTAMP_LTZ(3)。 |
182+
| NOW() | now() | 返回本地时区的当前 SQL 时间戳,是 CURRENT_TIMESTAMP 的同义词。 |
183+
| DATE_FORMAT(timestamp, string) | dateFormat(timestamp, string) | 将时间戳转换为指定日期格式字符串的值。格式字符串与 Java 的 SimpleDateFormat 兼容。 |
184+
| DATE_FORMAT(date, string) | dateFormat(date, string) | 将给定日期转换为指定格式字符串的值。格式字符串与 Java 的 SimpleDateFormat 兼容。 |
185+
| DATE_FORMAT(time, string) | dateFormat(time, string) | 将给定时间转换为指定格式字符串的值。格式字符串与 Java 的 SimpleDateFormat 兼容。 |
186+
| DATE_FORMAT_TZ(timestamp, format, timezone) | dateFormatTz(timestamp, format, timezone) | 使用给定的模式和指定的时区将时间戳或日期时间值格式化为字符串。timezone 参数可以是时区 ID(例如 'UTC'、'Asia/Shanghai')或偏移量(如 '+08:00')。 |
187+
| TIMESTAMPADD(timeintervalunit, interval, timepoint) | timestampadd(timeintervalunit, interval, timepoint) | 返回 timepoint 加上 interval 后的时间戳。时间间隔的单位由第一个参数指定,应为以下值之一:SECOND、MINUTE、HOUR、DAY、MONTH 或 YEAR。 |
188+
| TIMESTAMPDIFF(timepointunit, timepoint1, timepoint2) | timestampDiff(timepointunit, timepoint1, timepoint2) | 返回 timepoint1 和 timepoint2 之间的(有符号)时间单位数。时间间隔的单位由第一个参数指定,应为以下值之一:SECOND、MINUTE、HOUR、DAY、MONTH 或 YEAR。 |
189+
| TO_DATE(string1[, string2]) | toDate(string1[, string2]) | 将日期字符串 string1 按格式 string2(默认为 'yyyy-MM-dd')转换为日期。格式参数仅适用于该字符串重载。 |
190+
| TO_DATE(timestamp) | toDate(timestamp) | 将 TIMESTAMP、带时区的 TIMESTAMP(TIMESTAMP_TZ)或 TIMESTAMP_LTZ 值按该时间值的日历日期转换为 DATE。该重载不支持格式模式;若要解析带格式的字符串,请使用 `TO_DATE(string1[, string2])`。 |
191+
| TO_TIMESTAMP(string1[, string2]) | toTimestamp(string1[, string2]) | 将日期时间字符串 string1 按格式 string2(默认为 'yyyy-MM-dd HH:mm:ss')转换为时间戳,不带时区。 |
192+
| TO_TIMESTAMP_LTZ(string1[, string2]) | toTimestampLtz(string1[, string2]) | 将日期时间字符串 string1 按格式 string2(默认为 'yyyy-MM-dd HH:mm:ss')转换为时间戳,带本地时区。 |
193+
| FROM_UNIXTIME(numeric[, string]) | fromUnixtime(NUMERIC[, STRING]) | 返回 numeric 参数的字符串格式表示(默认为 'yyyy-MM-dd HH:mm:ss')。numeric 是表示自 '1970-01-01 00:00:00' UTC 以来秒数的内部时间戳值,例如由 UNIX_TIMESTAMP() 函数产生的值。返回值以会话时区(在 TableConfig 中指定)表示。例如,如果在 UTC 时区,FROM_UNIXTIME(44) 返回 '1970-01-01 00:00:44',但如果在 'Asia/Tokyo' 时区则返回 '1970-01-01 09:00:44'。 |
194+
| UNIX_TIMESTAMP() | unixTimestamp() | 获取当前 Unix 时间戳(秒)。此函数是非确定性的,意味着每条记录都会重新计算该值。 |
195+
| UNIX_TIMESTAMP(string1[, string2]) | unixTimestamp(STRING1[, STRING2]) | 将日期时间字符串 string1 按格式 string2(如果未指定,默认为 yyyy-MM-dd HH:mm:ss)转换为 Unix 时间戳(秒),使用表配置中指定的时区。<br/>如果日期时间字符串中指定了时区并以 UTC+X 格式(如 "yyyy-MM-dd HH:mm:ss.SSS X")解析,则此函数将使用日期时间字符串中指定的时区而不是表配置中的时区。如果无法解析日期时间字符串,将返回默认值 Long.MIN_VALUE(-9223372036854775808)。 |
196+
| DATE_ADD(date, int) | dateAdd(date, int) | 将 N 天添加到给定日期,返回格式为 'yyyy-MM-dd' 的字符串。 |
196197

197198
## 条件函数
198199

0 commit comments

Comments
 (0)