Oracle 中的 TO |
您所在的位置:网站首页 › 6人寓言故事课本剧 › Oracle 中的 TO |
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 |