全部产品

日期时间格式化

更新时间:2020-03-25 11:08:57

日期时间格式化指定了存储在数据库中日期时间数据的格式。日期时间格式化的总长度不能超过 22 个字符。

函数中的日期时间格式化

日期时间格式化出现在下面的数据类型转换中:

  • 将非默认格式的字符值转换为日期时间值时,需要 TO_DATETO_TIMESTAMPTO_TIMESTAMP_TZ 函数的参数指定日期时间的格式。

  • 将日期时间值转换为非默认格式的字符值时,需要指定 TO_CHAR 函数的参数。

您可以通过以下方式指定日期时间格式。

  • 通过会话参数 NLS_DATE_FORMATNLS_TIMESTAMP_FORMATNLS_TIMESTAMP_TZ_FORMAT 显式指定。
  • 通过会话参数 NLS_TERRITORY 隐式指定。
  • ALTER SESSION 语句更改会话的默认日期时间格式。

日期时间格式化

日期时间格式化由一个或多个日期时间格式化元素组成。OceanBase 支持的格式化元素请查阅 日期时间格式化的元素

  • 在格式化字符串中,相同的格式化元素不能出现两次,表示类似信息的格式化元素不能组合。例如,您不能在一个格式化字符串中同时使用 SYYYYBC 元素。
  • 所有格式化元素都可以在TO_CHARTO_DATETO_TIMESTAMPTO_TIMESTAMP_TZ函数中使用。
  • 日期时间格式化元素FFTZDTZHTZMTZR可以出现在时间戳和间隔格式中,但不能出现在DATE格式中。
  • 许多日期时间格式元素被空白填充或用零填充至指定的长度。

注意: OceanBase 建议您使用 4 位数的年份元素(YYYY),较短的年份元素会影响查询优化,因为年份只能在运行时确定。

日期时间格式化元素表

元素 日期时间函数是否支持? 说明
- / , 。 ; : “文字” 标点和引用的文本会在结果中复制。
AD
A.D.
表示公元纪年法,带有或不带有点号。
AM
A.M.
表示上午,带有或不带有点号。
BC
B.C.
表示公元前的年份,带有或不带有点号。
D 星期几(1-7)。
DAY 一天的名称。
DD 每月的一天(1-31)。
DDD 一年中的某天(1-366)。
DL 只能打印类似 “Monday, January, 01, 1996” 的固定格式。
DS 只能打印类似 “10-10-1996” 的固定格式。
DY 日期的缩写,返回星期值。
FF [1..9] 小数秒。使用数字 1~9 来指定返回值的小数秒部分的位数。默认为日期时间数据类型指定的精度。在时间戳和间隔格式中有效,但在 DATE 格式中无效。
FX 需要字符数据和格式模型之间的精确匹配。
HH
HH12
小时(1-12)。12 小时制
HH24 小时(0-23)。24 小时制
YYYY 包含4位数字的年份。
MI 分钟(0-59)。
MM 月(01-12;一月份表示为 01 )。
MON 月份的缩写。
MONTH 月份名称。
PM
P.M.
表示下午,带有或不带有点号。
Q 季度(1、2、3、4; 1月-3月是第 1 季度)。
RR RR 匹配两位数的年份。
RRRR 年。接受4位或2位输入。
SS 秒(0-59)。
SSSSS 午夜后的秒(0-86400)。
TZD 夏令时信息。TZD 值是带有夏令时信息的缩写时区字符串。在时间戳和间隔格式中有效,但在 DATE 格式中无效。
TZH 时区小时。在时间戳记和间隔格式中有效,但在 DATE 格式中无效。
TZM 时区分钟。在时间戳记和间隔格式中有效,但在 DATE 格式中无效。
TZR 时区区域信息。在时间戳和间隔格式中有效,但在 DATE 格式中无效。
X 小数点,永远是 ‘.’ 。
Y,YYY 带逗号的年。
YYYY
SYYYY
4位数字的年份。 S 代表用一个负号表示公元前的日期。
YYY
YY
Y
年份的后 3、2 或 1 位数字。

说明:日期时间函数指的是 TO_CHARTO_DATETO_TIMESTAMPTO_TIMESTAMP_TZ

日期格式化元素中的大写字母

拼写出来的单词、缩写词或罗马数字中的大写字母在相应的格式元素中也跟着大写。例如,日期格式元素 DAY 产生的 MONDAY 也大写,DayMonday 格式一样,daymonday 格式一样。

日期时间格式化中的标点符号和字符字面量

以下字符需要日期格式化,这些字符出现在返回值中的位置与格式化中字符的位置相同:

  • 标点符号,例如连字符,斜杠,逗号,句号和冒号。
  • 字符字面量,用双引号引起来。

OceanBase 数据库可以灵活的将字符串转换为日期。当您使用 TO_DATE 函数时,若输入字符串中的每个数字元素都包含格式化允许的最大位数,则格式字符串将与输入的字符串匹配。

示例 1:格式元素 MM/YY,其中 02 对应 MM07 对应 YY

执行以下语句:

  1. SELECT TO_CHAR(TO_DATE('0207','MM/YY'),'MM/YY') FROM DUAL;

查询结果如下:

  1. +------------------------------------------+
  2. | TO_CHAR(TO_DATE('0207','MM/YY'),'MM/YY') |
  3. +------------------------------------------+
  4. | 02/07 |
  5. +------------------------------------------+

示例 2:OceanBase 允许非字母数字字符与格式化中的标点字符匹配,# 对应 /

执行以下语句:

  1. SELECT TO_CHAR (TO_DATE('02#07','MM/YY'), 'MM/YY') FROM DUAL;

查询结果如下:

  1. +-------------------------------------------+
  2. | TO_CHAR(TO_DATE('02#07','MM/YY'),'MM/YY') |
  3. +-------------------------------------------+
  4. | 02/07 |
  5. +-------------------------------------------+

日期格式化元素与全球化支持

在 OceanBase 数据库中,日期时间格式化元素的语言可以通过参数 NLS_DATE_LANGUAGENLS_LANGUAGE 指定。默认值是 AMERICAN,不支持修改,所以不支持全球化。

示例:日期时间格式化的语言参数默认是 American,不支持其他语言。

  1. SELECT TO_CHAR (SYSDATE, 'DD/MON/YYYY', 'nls_date_language=''Traditional Chinese'' ') FROM DUAL;

查询结果报错,语言参数不支持。

  1. ERROR-12702: invalid NLS parameter string used in SQL function

更多信息

字符串到日期的转换规则