Char To Timestamp(Sys) - Amazon Kinesis Data Analytics
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

Char To Timestamp(Sys)

Char to Timestamp 函数是最常用的系统函数之一,因为您可利用它从任何格式设置正确的输入字符串创建时间戳。借助此函数,您可指定要在后续处理中使用的时间戳字符串的部分,并创建仅包含这些部分的 TIMESTAMP 值。为此,您指定标识所需时间戳的部分的模板。例如,要仅使用年和月,请指定 'yyyy-MM'。

输入日期时间字符串可包含完整时间戳 ('yyyy-MM-dd hh:mm:ss') 的任何部分。如果您的输入字符串中包含所有这些元素,并且 'yyyy-MM-dd hh:mm:ss' 是您提供的模板,则输入字符串元素将按年、月、日、小时、分钟和秒的顺序解释,如 '2009-09-16 03:15:24'。yyyy 不能是大写;hh 可以是大写,这意味着使用 24 小时制。

有关有效说明符的完整范围,请参阅 Oracle 网站上的 SimpleDateFormat 类

CHAR_TO_TIMESTAMP 在函数调用中使用您指定的模板作为参数。该模板促使 TIMESTAMP 结果仅使用您在模板中指定的输入日期时间值的某个部分。生成的 TIMESTAMP 中的字段包含取自您的 input-date-time 字符串中的相应数据。模板中未指定的字段将使用默认值 (见下文)。CHAR_TO_TIMESTAMP 所使用的模板的格式是由 Oracle 网站上的 SimpleDateFormat 类定义的。有关更多信息,请参阅日期和时间模式

函数调用语法如下所示:

CHAR_TO_TIMESTAMP('<format_string>','<input_date_time_string>')

其中,<format_ string> 是您为所需的 <date_time_string> 部分指定的模板,<input_date_time_string> 是将转换为 TIMESTAMP 结果的原始字符串。

请注意,每个字符串必须用单引号引起来,并且 <input_date_time_string> 的每个元素必须位于其在模板中的相应元素的范围内,否则不会返回任何结果。

例如,其位置对应于 MM 的 input-string-element 必须是 1 和 12 之间的整数,因为其他整数不代表有效的月份。同样,其位置对应于 dd 的 input-string-element 必须是 1 和 31 之间的整数,因为其他整数不代表有效的天。(但是,如果 MM 为 2,则 dd 不能是 30 或 31,因为二月没有这两天。)

对于小时、分钟或秒,默认起始值为零,因此当模板中省略这些说明符时,将用零替换。对于月或日,替换省略部分的默认起始值为 01。

例如,通过使用 '2009-09-16 03:15:24' 作为您的输入字符串,您可获取仅包含日期的 TIMESTAMP,而其他字段 (如小时、分钟或秒) 为零。

CHAR_TO_TIMESTAMP('yyyy-MM-dd','2009-09-16 03:15:24').

结果将为 TIMESTAMP 2009-09-16 00:00:00。

如果调用在模板中保留了小时和分钟,同时省略了月、日和秒,如以下调用中所示。

--- --- CHAR_TO_TIMESTAMP('yyyy-hh-mm','2009-09-16 03:15:24')

则生成的 TIMESTAMP 将为 2009-01-01 03:15:00。

创建特定输出时间戳的模板字符串演示了用于创建指示的输出 TIMESTAMP 的模板和输入字符串的更多说明性示例。

注意

输入字符串必须使用 'yyyy-MM-dd hh:mm:ss' 格式或子集,或对其重新排序。因此,使用类似 'Wednesday, 16 September 2009 03:15:24' 这样的输入字符串将无效,这意味着不会生成任何输出。

关于分隔符和值

模板中的分隔符必须与输入字符串中的分隔符匹配,输入字符串中的值必须是其对应的模板说明符可接受的。

一般约定是,冒号用于分隔小时和分钟以及分钟和秒。同样,一般约定为使用短横线或斜杠将年和月分开并将月和日分开。

例如,以下模板具有与输入字符串完全保持一致的值。

values (CHAR_TO_TIMESTAMP('MM/dd/yy hh:mm:ss','09/16/11 03:15:24') ); 'EXPR$0' '2011-09-16 03:15:24' 1 row selected

如果输入字符串中的值是其对应的模板说明符不可接受的,结果将失败,如以下示例中所示。

values (CHAR_TO_TIMESTAMP('MM/dd/yy hh:mm:ss','2009/09/16 03:15:24') ); 'EXPR$0' No rows selected

此示例未返回任何行,因为 2009 不是可接受的月份值,而它是模板中的第一个说明符 (MM)。

提供的字符串中的省略会导致模板值 'yyyy' 生成合理但意外的结果。下列示例均返回错误的年份,而它直接派生自所提供字符串中的第一个元素。

VALUES(CHAR_TO_TIMESTAMP('yyyy','09-16 03:15')); 'EXPR$0' '0009-01-01 00:00:00' 1 row selected VALUES(CHAR_TO_TIMESTAMP('yyyy','16 03:15')); 'EXPR$0' '0016-01-01 00:00:00' 1 row selected

使用模板创建 TIMESTAMPS 的示例

模板的顺序必须与输入字符串匹配。这意味着,您无法在“yyyy”后指定“hh”,并且需要自动查找小时的方法。例如,以下模板先指定年,接着指定小时和分钟,然后返回错误结果。

values (CHAR_TO_TIMESTAMP('yyyy-hh-mm','2009-09-16 03:15:24')); 'EXPR$0' '2009-01-01 09:16:00' 1 row selected

由于模板中没有月和日的说明符,将忽略其在输入字符串中的值,并且在输出 TIMESTAMP 中将这两个值替换为 01。模板已指定小时和分钟作为第二个和第三个输入值,因此 09 将变为小时值,16 将变为分钟值。秒没有对应的说明符,因此使用 00。

年说明符可单独存在或位于分隔符之后,匹配输入字符串显示年说明符的末尾与 hours:minutes:seconds 说明符之一。

values (CHAR_TO_TIMESTAMP('yyyy','2009-09-16 03:15:24') ); 'EXPR$0' '2009-01-01 00:00:00' 1 row selected

相反,下方的模板将失败,因为它在“hh”前具有使用空格作为分隔符,而未使用输入字符串的日期规范中使用的短横线分隔符。

values (CHAR_TO_TIMESTAMP('yyyy hh','2009-09-16 03:15:24') ); 'EXPR$0' No rows selected

下方的 4 个模板有效,因为它们依据输入字符串的日期规范使用分隔符来分隔年说明符与下一个说明符 (第一个示例中使用短横线,第二个示例中使用空格,第三个示例中使用斜杠,第四个示例中使用短横线)。

values (CHAR_TO_TIMESTAMP('yyyy-hh','2009-09-16 03:15:24') ); 'EXPR$0' '2009-01-01 09:00:00' 1 row selected values (CHAR_TO_TIMESTAMP('yyyy hh','2009 09 16 03:15:24') ); 'EXPR$0' '2009-01-01 09:00:00' 1 row selected values (CHAR_TO_TIMESTAMP('yyyy/hh','2009/09/16 03:15:24') ); 'EXPR$0' '2009-01-01 09:00:00' 1 row selected values (CHAR_TO_TIMESTAMP('yyyy-mm','2009-09-16 03:15:24') ); 'EXPR$0' '2009-01-01 00:09:00' 1 row selected

但是,如果模板指定月 (MM),除非还指定日,否则它无法指定小时、分钟或秒。