Oracle 中的 TO

您所在的位置:网站首页 6人寓言故事课本剧 Oracle 中的 TO

Oracle 中的 TO

2023-04-14 12:18| 来源: 网络整理| 查看: 265

Oracle 中的 TO_TIMESTAMP() 函数

在 Oracle 数据库中,该TO_TIMESTAMP()函数将其参数转换为TIMESTAMP数据类型的值。

句法

语法如下:

TO_TIMESTAMP(char [ DEFAULT return_value ON CONVERSION ERROR ] [, fmt [, 'nlsparam' ] ])

参数可以是计算结果为、、或数据类型char的字符串的任何表达式。CHARVARCHAR2NCHARNVARCHAR2

可选项 fmt 指定char. 如果省略fmt,则char必须采用TIMESTAMP数据类型的默认格式,该格式由NLS_TIMESTAMP_FORMAT初始化参数确定(请参阅如何检查 Oracle 会话的日期格式)。

可选'nlsparam'参数指定提供月份和日期名称和缩写的语言。它采用以下形式:

'NLS_DATE_LANGUAGE = language' 例子

这是一个演示的基本示例:

SELECT TO_TIMESTAMP( '25-Aug-2030 18:10:35.123456789', 'DD-Mon-RRRR HH24:MI:SS.FF' ) FROM DUAL;

结果:

25/AUG/30 06:10:35.123456789 PM

结果的格式由您的会话NLS_TIMESTAMP_FORMAT参数确定。我们可以NLS_TIMESTAMP_FORMAT通过查询V$NLS_PARAMETERS视图来检查参数的值:

SELECT VALUE FROM V$NLS_PARAMETERS WHERE PARAMETER = 'NLS_TIMESTAMP_FORMAT';

结果:

DD/MON/RR HH12:MI:SSXFF AM

参数的默认值NLS_TIMESTAMP_FORMAT是从参数导出的NLS_TERRITORY。在我的情况下,NLS_TERRITORY参数是AUSTRALIA.

当我将NLS_TERRITORY参数更改为另一个区域,然后TO_TIMESTAMP()再次调用时,会发生以下情况:

ALTER SESSION SET NLS_TERRITORY = 'AMERICA'; SELECT TO_TIMESTAMP( '25-Aug-2030 18:10:35.123456789', 'DD-Mon-RRRR HH24:MI:SS.FF' ) FROM DUAL;

结果:

25-AUG-30 06.10.35.123456789 PM

这次结果以不同的格式返回。

您也可以直接更改NLS_TIMESTAMP_FORMAT参数的值。这将更改该参数而不影响其他参数。有关更多信息和示例,请参阅如何更改 Oracle 会话中的日期格式。

默认格式

在此示例中,我省略了fmt参数:

SELECT TO_TIMESTAMP( '25-AUG-30 06.10.35.123456789 PM' ) FROM DUAL;

结果:

25-AUG-30 06.10.35.123456789 PM

执行此操作时,参数必须采用TIMESTAMP数据类型的默认格式,该格式由NLS_TIMESTAMP_FORMAT初始化参数确定。

下面是一个例子,当我们传递一个不符合这种格式的值时会发生什么:

SELECT TO_TIMESTAMP( '25-Aug-2030 18:10:35.123456789' ) FROM DUAL;

结果:

ORA-01849: hour must be between 1 and 12 01849. 00000 - "hour must be between 1 and 12" *Cause: *Action:

在本例中,我传递了一个使用 24 小时制的值,但我的NLS_TIMESTAMP_FORMAT参数使用 AM/PM 指示符指定了 12 小时制。

要解决这个问题,我要么需要更改我的输入,要么更改NLS_TIMESTAMP_FORMAT参数的值。

提供转换错误的默认值

TIMESTAMP如果在将参数转换为类型时出现错误,您还可以选择提供要返回的值。

例子:

SET NULL 'null'; SELECT TO_TIMESTAMP( 'Oops!' DEFAULT null ON CONVERSION ERROR ) FROM DUAL;

结果:

null

在这种情况下,我指定null只要出现转换错误就应该返回。

默认情况下,SQLcl 和 SQL*Plus 会在 SQL语句null的结果出现时返回一个空格。SELECT

但是,您可以使用SET NULL指定要返回的不同字符串。这里我指定null应该返回字符串。

'nlsparam'论据_

可选'nlsparam'参数指定提供月份和日期名称和缩写的语言。它采用以下形式:

'NLS_DATE_LANGUAGE = language'

例子

SELECT TO_TIMESTAMP( '25-agosto-2030 18:10:35.123456789', 'DD-Month-RRRR HH24:MI:SS.FF', 'NLS_DATE_LANGUAGE = SPANISH' ) FROM DUAL;

结果:

25-AUG-30 06.10.35.123456789 PM

请注意,结果仍然根据当前会话的NLS_TIMESTAMP_FORMAT参数返回。只是输入的语言不同。

当我更改agosto为August同时使用相同的'nlsparam'值时,会发生以下情况:

SELECT TO_TIMESTAMP( '25-August-2030 18:10:35.123456789', 'DD-Month-RRRR HH24:MI:SS.FF', 'NLS_DATE_LANGUAGE = SPANISH' ) FROM DUAL;

结果:

ORA-01843: not a valid month 01843. 00000 - "not a valid month" *Cause: *Action:

发生这种情况是因为我没有以'nlsparam'参数指定的语言(西班牙语)提供日期。

改变它来English解决这个问题:

SELECT TO_TIMESTAMP( '25-August-2030 18:10:35.123456789', 'DD-Month-RRRR HH24:MI:SS.FF', 'NLS_DATE_LANGUAGE = English' ) FROM DUAL;

结果:

25-AUG-30 06.10.35.123456789 PM

如果有帮助,请参阅如何在 Oracle 中返回支持的语言列表。

空参数

传递null结果null:

SET NULL 'null'; SELECT TO_TIMESTAMP(null) FROM DUAL;

结果:

null 无效的参数计数

在不传递任何参数的情况下调用函数会导致错误:

SELECT TO_TIMESTAMP() FROM DUAL;

结果:

ORA-00938: not enough arguments for function 00938. 00000 - "not enough arguments for function" *Cause: *Action: Error at Line: 8 Column: 8

但是,传递太多参数似乎不会导致任何问题,只要前三个是有效的:

SELECT TO_TIMESTAMP( '25-Aug-2030 18:10:35.123456789', 'DD-Mon-RRRR HH24:MI:SS.FF', 'NLS_DATE_LANGUAGE = English', 'Oops!', 'Dang!', 'Homer', 'Symptom' ) FROM DUAL;

结果:

25-AUG-30 06.10.35.123456789 PM


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3