Oracle CAST() 函数使用指南

Oracle CAST() 是一个内置函数,它将给定的参数从一种类型转换为另一种类型。此函数支持基本数据类型和集合类型。

Oracle CAST() 语法

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

CAST({ expr | MULTISET (subquery) } AS type_name
  [ DEFAULT return_value ON CONVERSION ERROR ]
  [, fmt [, 'nlsparam' ] ])

参数

expr

必需的。 它可以是内置数据类型、集合类型或 ANYDATA 类型的实例。此参数与 MULTISET (subquery) 参数必须提供一个。

type_name

必需的。它必须是一个内置数据类型或集合类型的名称。

DEFAULT return_value ON CONVERSION ERROR

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

fmt

可选的。格式化字符串。

'nlsparam'

可选的。您可以使用这个 'NLS_DATE_LANGUAGE = language' 形式设置此参数,其中 language 是语言名称。

返回值

Oracle CAST() 函数将给定的参数从一种类型转换为另一种类型并返回转换后的值。

CAST 不支持 LONGLONG RAW 类型。 CAST 不直接支持任何 LOB 数据类型。当使用 CASTCLOB 值转换为字符数据类型或将 BLOB 值转换为 RAW 数据类型时,数据库会将 LOB 值隐式转换为字符或原始数据,然后显式地将结果值强制转换为目标数据类型。如果结果值大于目标类型,则数据库将返回一个错误。

当使用 CAST ... MULTISET 获取集合值时,传递给 CAST 函数的查询中的每个选择列表项都将转换为目标集合元素类型的相应属性类型。

Oracle CAST() 示例

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

基本用法

下面的示例演示了如何将一个字符串日期转为 TIMESTAMP 类型:

ALTER SESSION SET NLS_TIMESTAMP_FORMAT = 'YYYY-MM-DD HH24:MI:SSXFF';
SELECT
    CAST('2023-02-28' AS TIMESTAMP, 'YYYY-MM-DD') Result
FROM dual;

输出:

RESULT
________________________________
2023-02-28 00:00:00.000000000

国家

Oracle CAST() 函数允许您指定语言以按照指定的语言进行转换。

SELECT CAST(
        '28-Feb-23' AS TIMESTAMP,
        'DD-MON-YY',
        'NLS_DATE_LANGUAGE = American'
    ) Result
FROM dual;

输出:

RESULT
________________________________
2023-02-28 00:00:00.000000000

在看一个使用简体中文语言的示例:

SELECT CAST(
        '20-2月 -23' AS TIMESTAMP,
        'DD-MON-YY',
        'NLS_DATE_LANGUAGE = ''Simplified Chinese'''
    ) Result
FROM dual;

输出:

RESULT
__________________________________
20-2月 -23 12.00.00.000000000 上午

出错

Oracle CAST() 函数允许您使用 DEFAULT return_value ON CONVERSION ERROR 参数指定在转换值时发生错误时要返回的内容。

如果您直接运行以下语句, Oracle 或许或返回以下错误:

SELECT
    CAST('2023-02-28' AS TIMESTAMP) Result
FROM dual;

输出:

SQL Error: ORA-01843: not a valid month
01843. 00000 -  "not a valid month"

这是因为,这个格式可能跟您的会话语言不一致导致的。此时您可以指定一个默认值,如下:

SELECT
    CAST('2023-02-28' AS TIMESTAMP DEFAULT '28-2月 -23' ON CONVERSION ERROR) Result
FROM dual;

输出:

RESULT
__________________________________
28-2月 -23 12.00.00.000000000 上午

请注意,默认值需要符合当前的环境设置或者通过 fmt 参数指定的格式。

结论

Oracle CAST() 是一个内置函数,它将给定的参数从一种类型转换为另一种类型。此函数支持基本数据类型和集合类型。