用于创建特定输出时间戳的模板字符串 - Amazon Kinesis Data Analytics

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

用于创建特定输出时间戳的模板字符串

模板 输入字符串 TIMESTAMP 注意
'yyyy-MM-dd hh:mm:ss' '2009-09-16 03:15:24' '2009-09-16 03:15:24'
'yyyy-mm' '2011-02-08 07:23:19' '2011-01-01 00:02:00'

上面的模板仅指定第一年和第二分钟,因此输入字符串 (“02”) 中的第二个元素用作分钟。默认值用于月和日 (“01”) 以及小时和秒 (“00”)。

'MMM dd, yyyy' 'March 7, 2010' '2010-03-07 00:00:00'

上面模板中的 MMM 与 “March” 匹配;模板的 “逗号空格” 与输入字符串匹配。

如果模板缺少逗号,则输入字符串也必须缺少逗号,否则没有输出;

如果输入字符串缺少逗号,则模板也必须缺少逗号。

'MMM dd,' 'March 7, 2010' '1970-03-07 00:00:00'

请注意,上面的模板不使用年份说明符,导致输出 TIMESTAMP 使用这个时代最早的年份,即 1970 年。

'MMM dd,y' 'March 7, 2010' '2010-03-07 00:00:00'

使用上面的模板,如果输入字符串是 “10 年 3 月 7 日”,则输出 TIMESTAMP 将为 '0010-03-07 00:00:00 '。

'M-d' '2-8' '1970-02-08 00:00:00'

如上所述,模板中没有 yyyy 说明符,则使用该时代最早的年份(1970)。

输入字符串 '2—8−2011' 会给出相同的结果;使用 '2011—2−8' 不会给出任何结果,因为 2011 不是有效的月份。

'MM-dd-yyyy' '06-23-2011 10:11:12' '2011-06-23 00:00:00'

如果模板和输入在相同位置使用短划线作为分隔符(如上所述),则可以将破折号用作分隔符。由于模板省略了小时、分钟和秒,因此在输出 TIMESTAMP 中使用零。

'dd-MM-yy hh:mm:ss'

'23-06-11 10:11:12'

'2011-06-23 10:11:12'

您可以按任何顺序使用说明符,只要该顺序与您提供的输入字符串的含义相匹配。以下下一个示例的模板和输入字符串与本示例具有相同的含义(和相同的输出 TIMESTAMP),但它们指定的是几天之前的月和几小时之前的秒。

'MM-dd-yy ss:hh:mm'

'06-23-11 12:10:11'

'2011-06-23 10:11:12'

在上面使用的模板中,月和日说明符的顺序与上面的示例相反,秒的说明符在小时之前而不是几分钟之后;但是由于输入字符串还将月份放在天之前,将秒放在小时之前,因此含义(和输出 TIMESTAMP)与上面的示例相同。

'yy-dd-MM ss:hh:mm'

'06-23-11 12:10:11'

'2006-11-23 10:11:12'

上面使用的模板颠倒了年份和月份说明符(与上面的示例相比),而输入字符串保持不变。在这种情况下,输出 TIMESTAMP 使用输入字符串的第一个元素作为年份,第二个元素作为天数,第三个元素作为月份。

'dd-MM-yy hh:mm'

'23-06-11 10:11:12'

'2011-06-23 10:11:00'

如上所述,模板中省略了秒数,输出 TIMESTAMP 使用 00 秒。任意数量的 y 说明符都会产生相同的结果;但如果输入字符串无意中使用了 1 而不是 11 作为年份,如 '23-06-1 10:11:12 ',则输出 TIMESTAMP 将变成 '0001-06-23 10:11:00'。

'MM/dd/yy hh:mm:ss'

'12/19/11 10:11:12'

'12/19/11 12:11:12'

'2011-12-19 10:11:12'

'12/19/11 00:11:12'

如上所述,如果模板和输入在相同位置使用斜杠作为分隔符,则可以使用斜杠。使用说明符 hh,12:11:10 和 00:11:10 的输入时间与早上的某个时间具有相同的含义。

'MM/dd/yy HH:mm:ss'

'12/19/11 12:59:59'

'12/19/11 21:08:07'

'2011-12-19 00:11:12'

'2011-12-19 12:11:12'

'2011-12-19 12:59:59'

'2011-12-19 21:08:07'

此模板的输入字符串值'2011-12-19 00:11:12''2011-12-19 12:11:12'将失败,因为'2011'不是模板字符串要求/预期的月份'MM/dd/yy HH:mm:ss'

但是,更改模板会提供有用的输出:

values(cast(CHAR_TO_TIMESTAMP('y/MM/dd HH:mm:ss', '2011/12/19 00:11:12') as varchar(19))); 'EXPR$0' '2011-12-19 00:11:12'

已选择 1 行

'12/19/11 00:11:12'使用上述模板 ('y/MM/dd') 会失败,因为 19 不是有效的月份;提供 '12/11/19 00:11:12'有效。

'2011-12-19 12:11:12'输入会失败,因为破折号与模板中的斜杠不匹配,'2011/12/19 12:11:12'可以正常工作。

请注意,对于中午 12 点之后的时间(即下午和晚上),小时说明符必须为 HH 而不是 hh,并且输入字符串必须在 24 小时时钟时间中指定下午或晚上,小时从 00 到 23。

使用说明符 HH,12:11:10 和 00:11:10 的输入时间具有不同的含义,第一个是下午的时间,第二个是早上的时间。

使用说明符 hh,从 12:00 到 11:59:59 的时间是早晨:

  • 给定说明符 hh: mm: ss,输出 TIMESTAMP 将在早上同时包含'00:09:08'输入字符串 '12:09:08' 和输入字符串的输出 TIMESTAMP'00:09:08';而

  • 给定说明符 hh: mm: ss,早上输入字符串'00:09:08'的输出时间戳将包括'00:09:08'

    下午输入字符串'12:09:08'的输出时间戳将包括'12:09:08'