Oracle TO_YMINTERVAL() 函数使用指南

Oracle TO_YMINTERVAL() 是一个内置函数,它将给定的字符串参数转为一个 INTERVAL MONTH TO YEAR 类型的值。

Oracle TO_YMINTERVAL() 语法

这里是 Oracle TO_YMINTERVAL() 函数的语法:

TO_YMINTERVAL(str, [ DEFAULT return_value ON CONVERSION ERROR ])

参数

str

必需的。它可以是指定计算结果为 CHARVARCHAR2NCHARNVARCHAR2 数据类型的字符串的任何表达式。您可以使用两种格式的其中一种:

  • 与 SQL 标准 (ISO/IEC 9075) 兼容的 SQL 间隔格式: [+|-] years - months。其中,years 是 0 到 999999999 之间的整数,months 是 0 到 11 之间的整数。在元素之间允许一个或多个额外的空格。

  • 与 ISO 8601:2004 标准兼容的 ISO 持续时间格式: [-]P[yearsY] [monthsM][[daysD][T[hours H][minutes M][seconds[.frac_secs]S]]。其中,minutesseconds 是介于 0 和 999999999 之间的整数。 dayshoursminutessecondsfrac_secs 是非负整数并且被忽略。值中不允许有空格。如果指定 T,则必须至少指定 hoursminutesseconds 中的一个。

DEFAULT return_value ON CONVERSION ERROR

可选的。它允许您指定在转换发生错误时返回的值。

返回值

Oracle TO_YMINTERVAL() 函数返回一个 INTERVAL MONTH TO YEAR 类型的值。

如果任意一个参数为 NULLTO_YMINTERVAL() 将返回 NULL

Oracle TO_YMINTERVAL() 示例

这里有几个展示了 Oracle TO_YMINTERVAL() 函数用法的示例。

SQL 格式

本示例使用 SQL 格式传入一个区间值:

SELECT
    TO_YMINTERVAL('100 - 10')  "Result1",
    TO_YMINTERVAL('+100 - 10') "Result2",
    TO_YMINTERVAL('-100 - 10') "Result3"
FROM dual;

输出:

Result1    Result2    Result3
__________ __________ __________
+100-10    +100-10    -100-10

ISO 格式

本示例使用 ISO 格式传入一个区间值:

SELECT
    TO_YMINTERVAL('P100Y10M')  "Result1",
    TO_YMINTERVAL('-P100Y10M')  "Result2",
    TO_YMINTERVAL('P100Y10M100DT10H11M12.123S')  "Result3"
FROM dual;

输出:

Result1    Result2    Result3
__________ __________ __________
+100-10    -100-10    +100-10

错误

如果您提供了一个错误的格式, Oracle TO_YMINTERVAL() 函数将报告一个错误:

SELECT
    TO_YMINTERVAL('+P100Y10M')
FROM dual;

输出:

SQL Error: ORA-01867: the interval is invalid
01867. 00000 -  "the interval is invalid"
*Cause:    The character string you specified is not a valid interval.
*Action:   Please specify a valid interval.

在本示例中,由于 IOS 格式不支持 + 符号,因此 Oracle 报告了一个错误。 Oracle TO_YMINTERVAL() 函数允许您指定一个默认值以应对转换出错:

SELECT
    TO_YMINTERVAL(
      '+P100Y10M'
      DEFAULT 'P100Y10M' ON CONVERSION ERROR
    ) "Result"
FROM dual;

输出:

Result
__________
+100-10

NULL 参数

如果任意一个参数为 NULLTO_YMINTERVAL() 将返回 NULL

SET NULL 'NULL';
SELECT
    TO_YMINTERVAL(NULL)
FROM dual;

输出:

TO_YMINTERVAL(NULL)
______________________
NULL

在本示例中,我们使用 SET NULL 'NULL'; 语句将 NULL 值显示为 'NULL' 字符串。

结论

Oracle TO_YMINTERVAL() 是一个内置函数,它将给定的字符串参数转为一个 INTERVAL MONTH TO YEAR 类型的值。