TIMESTAMP_FORMAT
TIMESTAMP_FORMAT 函数返回时间戳记 基于使用指定格式的输入字符串的解释。
- 字符串表达式
- 返回任何内置字符串数据类型或图形字符串数据类型的值的表达式。
使用 format-string指定的格式将字符串解释为 a date or timestamp。 string-expression 必须仅包含对应于 format-string指定的格式元素的日期或时间戳记的组成部分。
- 格式字符串
- 返回内置字符串数据类型或图形字符串数据类型的表达式。 format-string 包含如何将 string-expression 解释为 日期或 时间戳记值的模板。
有效的 format-string 必须至少包含一个 format 元素,不得包含 日期或 时间戳记的任何组件的多个规范,并且可以包含格式元素的任何组合,除非在 表 1中另有说明。 例如, format-string 不能同时包含 YY 和 YYYY ,因为它们都用于解释 string-expression的年份部分。 请参阅该表以确定哪些格式元素不能一起指定。
可以选择使用以下一个或多个分隔符来分隔两个格式元素:- 减号(-)
- 句点 (.)
- 斜杠 (/)
- 逗号 (,)
- 撇号 (')
- 分号 (;)
- 冒号 (:)
- 空白 ()
还可以在 format-string的开头或结尾指定分隔符。 这些分隔符可以在格式字符串中的任意组合中使用,例如 "YYYY/MM-DD HH24:MM.SS"。 string-expression 中指定的分隔符用于分隔组件,不需要与 format-string中指定的分隔符匹配。
表 1. TIMESTAMP_FORMAT 函数的格式元素 格式元素 时间戳记的相关组件 描述 AM 或 PM 1 , 2 小时 子午线指标 (上午或晚上) 无期。 从库 *LIBL 中的消息文件 QCPFMSG 中的消息 CPX9035 检索子午线指示符。 A.M. 或 P.M. 1 , 2 小时 带有周期的子午线指标 (上午或晚上)。 此格式元素使用精确字符串A.M. ' 或 'P.M. ' 并且独立于作业中用于消息的语言。 DAY , Day 或 day 1 , 3 无 以大写, titlecase 或小写格式表示的日期的名称。 从库 *LIBL 中的消息文件 QCPFMSG 中的消息 CPX9034 检索当天的名称。 DY , Dy 或 dy 1 , 3 无 以大写, titlecase 或小写格式表示的日期的缩写名称。 从库 *LIBL 中的消息文件 QCPFMSG 中的消息 CPX9039 检索当天的缩写名。 D 1 和 3 无 星期几 (1-7) ,其中 1 是星期日。 DD 天 月日 (01-31)。 DDD 月,日 一年中的第几天 (001-366)。 FF 或 FFn 小数秒 小数秒数 (0-99999999999999)。 数字 n 用于指定 string-expression中期望的位数。 n 的有效值为 1-12。 指定 FF 等同于指定 FF6。 当 string-expression 中对应于 FF 格式元素的组件后跟分隔符或最后一个组件时,小数秒数的位数可以小于格式元素指定的位数。 在这种情况下,将在指定数字的右边填充零个数字。 HH 小时 HH 的行为与 HH12相同。 HH12 小时 一天中的小时 (01-12) ,采用 12 小时格式。 AM 是缺省子午线指示符。 HH24 小时 24 小时制 (00-24)。 J 年,月和日 儒略日期 (自公元前 4713 年 1 月 1 以来的天数)。 MI 分钟 分钟 (00-59)。 MM 月 月 (01-12)。 MONTH ,月或月 1 月 以大写, titlecase 或小写格式表示的月份的名称。 从库 *LIBL 的消息文件 QCPFMSG 中的消息 CPX3BC0 检索月份的名称。 MON , Mon 或 mon 1 月 以大写, titlecase 或小写格式表示的月份的缩写名称。 从库 *LIBL 中的消息文件 QCPFMSG 中的消息 CPX8601 检索月份的名称。 NNNNNNN 微秒 微秒 (与 FF6相同)。 RR 4 年 调整年份的最后 2 个数字 (00-99)。 RRRR 4 年 四位数调整年份 (0000-9999)。 SS 秒 秒 (00-59)。 SSSSS 小时,分钟和秒 自上次午夜 (00000-86400) 以来的秒数。 Y 年 年份的最后一位数字 (0-9)。 当前年份的前三个数字用于确定完整的 4 数字年份。 YY 年 年的最后 2 位 (00-99)。 当前年份的前两位数字用于确定完整的 4 数字年份。 年 年 年的最后三位数字 (000-999)。 当前年份的第一个数字用于确定完整的 4 数字年份。 YYYY 年 4-数字年份 (0000-9999)。 注:- 只能使用这些精确拼写和大小写组合。 如果在无效案例组合中指定了此格式元素,那么将返回错误。
- 子午线指示符的 AM 和 PM 集合可以在 format-string中互换使用,如 A.M. 和 P.M。 如果在 format-string 中使用 HH24 以及子午线指示符,那么 string-expression 中子午线指示符的值不会用于确定生成的时间戳记的小时部分。
- DAY , Day , day DY , Dy , dy 和 D 格式元素不会添加到生成的时间戳记的任何组件。 但是,对于生成的时间戳记的年,月和日部分的组合,任何这些格式元素的指定值都必须正确。 例如, string-expression 的值 "星期一 2008-10-06" 对于值 "Day YYYY-MM-DD" 有效。 但是, string-expression 的值 "星期二 2008-10-06" 将导致同一 format-string发生错误。
- RR 和 RRRR 格式元素可用于更改如何解释年份的规范,方法是根据下表调整值以生成 2 位或 4 位的值,具体取决于当前年份的最左两位数:
当前年份的最后两位数字 string-expression 中的年份的两位数字 日期或 时间戳记的年份部分的前 2 位数字 0-50 0-49 当前年份的前 2 位数字 51-99 0-49 当前年份的前 2 位数字 + 1 0-50 50-99 当前年份的前 2 位-1 51-99 50-99 当前年份的前 2 位数字 例如,如果当前年份为 2007 ,那么格式为 "RR" 的 "86" 表示 1986 ,但如果当前年份为 2052 ,那么表示 2086。
当 format-string 不包含时间戳记的其中一个组件的格式元素时,将使用以下缺省值:
时间戳记组件 缺省值 年 当前年份,以 4 位数字表示 月 当前月份,以 2 位数字表示 天 01 (第一天) 小时 00 分钟 00 秒 00 小数秒 与结果的时间戳记精度匹配的零数 如果 string-expression 不包含对应于 format-string中指定的小时,分钟,秒或小数秒格式元素的值,那么将使用这些相同的缺省值。
可以为 日期或 时间戳记值 (例如,月,日,小时,分钟,秒) 的任何组件指定前导零,但该组件没有 format-string中相应格式元素的最大有效数字。
表示 日期或 时间戳记 (例如年,月,日,小时,分钟,秒) 的组件的 string-expression 子串可以包含小于 日期或 时间戳记的该组件的最大位数。 任何缺少的数字都缺省为零。 例如,如果格式字符串为 "YYYY-MM-DD HH24:MI:SS" ,那么输入值 "999-3-9 5:7:2" 将生成与 "0999-03-09 05:07:02" 相同的结果。
- 精度常量
- 一个整数常量,用于指定结果的时间戳记精度。 该值必须在范围 0 到 12 之间。 如果未指定 precision-constant ,那么时间戳记精度缺省为 6。
结果是时间戳记 具有基于 精度常量 的精度。 如果前两个自变量中的任何一个可以为空,那么结果可以为空; 如果前两个自变量中的任何一个为空,那么结果为空值。
注意
儒略历和公历: 此函数会将 1582 年 10 月 15 日从儒略历到公历的过渡考虑在内。
语法替代方法: TO_DATE 是 TIMESTAMP_FORMAT 的同义词。 TO_TIMESTAMP 与 TIMESTAMP_FORMAT 完全相同,但如果未指定 precision-constant ,那么结果的时间戳记精度缺省为 12。
示例
- 在 IN_TRAY 表中插入一行,其接收时间戳记在 2000 年开始前等于一秒 (1999 年 12 月 31 日 23:59:59)。
INSERT INTO IN_TRAY (RECEIVED) VALUES (TIMESTAMP_FORMAT('1999-12-31 23:59:59', 'YYYY-MM-DD HH24:MI:SS')) - 应用程序将日期信息字符串接收到名为 INDATEVAR 的变量中。 此值未严格格式化,可能包含年份的两位数或四位数,以及月份和天数的一位数或两位数。 日期组件可以用减号 (-) 或斜杠 (/) 字符分隔,并且应该采用日,月和年顺序。 时间信息由小时 (24 小时格式) 和分钟组成,通常以冒号分隔。 样本值包括 "1 5/1 2/98 13:48" 和 "9-3-2004 8:02"。 将此类值插入 IN_TRAY 表中。
使用格式中的 RRRR 允许使用 2 和 4 数字的年份值,并根据当前年份分配缺失的前两位数字。 如果使用了 YYYY ,那么具有 2 数字年份的输入值将具有前导零。 斜杠分隔符还允许减号字符。 假设当前年份为 2007 ,那么从样本值生成的时间戳记为:INSERT INTO IN_TRAY (RECEIVED) VALUES (TIMESTAMP_FORMAT(:INDATEVAR, 'DD/MM/RRRR HH24:MI'))'15/12/98 13:48' --> 1998-12-15-13.48.00.000000 '9-3-2004 8:02' --> 2004-03-09-08.02.00.000000 - 如果字符变量 TVAR 在 2000 年开始前等于一秒 ('1999-12-31 23:59:59') ,请将其设置为 QSYS2.SYSPROCS 中 ROUTINE_CREATED 的值。 应根据提供的格式字符串来解释字符串。
SELECT VARCHAR_FORMAT(ROUTINE_CREATED, 'YYYY-MM-DD HH24:MI:SS') INTO :TVAR FROM QSYS2.SYSPROCS WHERE ROUTINE_CREATED = TIMESTAMP_FORMAT('1999-12-31 23:59:59', 'YYYY-MM-DD HH24:MI:SS') - 返回包含子午线指示符的字符串的时间戳记值:
字符串表达式 格式-表达式 结果时间戳记值 '2015 -10-28 10:29AM' 'YYYY-MM-DD HH12:MIAM ' 2015-10-28-10.29.00.000000 '2015 -10-28 10:29PM' 'YYYY-MM-DD HH12:MIAM ' 2015-10-28-22.29.00.000000 '2015 -10-28 10:29AM' 'YYYY-MM-DD HH24:MIAM ' 2015-10-28-10.29.00.000000 '2015 -10-28 10:29PM' 'YYYY-MM-DD HH24:MIAM ' 2015-10-28-10.29.00.000000 '2015 -10-28 22:29AM' 'YYYY-MM-DD HH24:MIAM ' 2015-10-28-22.29.00.000000 '2015 -10-28 22:29PM' 'YYYY-MM-DD HH24:MIAM ' 2015-10-28-22.29.00.000000
