问题描述
大家好,
我以不同的方式重新提出这个问题,希望有人能够帮助我
作为快速测试,我做了以下操作,希望可以复制
我将使用的数据,日期时间将按以下方式输入。
当我现在尝试提取HH:MI:SS时
我得到以下错误
ORA-01722: 无效编号
01722. 00000-“无效号码”
* 原因: 指定的数字无效。
* 操作: 指定一个有效的数字。
使用此测试示例,我可以使用什么来成功地提取仅在HH:MM:SS中的时间部分?
此外
我在数据库下的日期格式-> NLS是MM/DD/YYYY HH24:MI:SS
我以不同的方式重新提出这个问题,希望有人能够帮助我
作为快速测试,我做了以下操作,希望可以复制
create table t ( test1 varchar2(22) );
我将使用的数据,日期时间将按以下方式输入。
insert into t values ( '05/22/2017 02:20:55 AM' );
当我现在尝试提取HH:MI:SS时
select to_char(test1, 'hh:mi:ss')
from t我得到以下错误
ORA-01722: 无效编号
01722. 00000-“无效号码”
* 原因: 指定的数字无效。
* 操作: 指定一个有效的数字。
使用此测试示例,我可以使用什么来成功地提取仅在HH:MM:SS中的时间部分?
此外
我在数据库下的日期格式-> NLS是MM/DD/YYYY HH24:MI:SS
专家解答
由于您将日期存储为字符串 (坏主意),因此可以使用标准字符串操作将其提取。
选择1行。
或者,您可以将字符串转换为日期,此时,to_char函数变得可用,因为to_char不 * 将字符串作为输入,而是日期或数字 (这就是为什么你得到这个错误)。
理想情况下,您希望将表列定义为日期,此时,to_char将直接在该列上工作。
SQL> insert into t values ( '05/22/2017 02:20:55 AM' ); 1 row created. SQL> select substr(test1,12,8) from t; SUBSTR(TEST1,12,8) -------------------------------- 02:20:55
选择1行。
或者,您可以将字符串转换为日期,此时,to_char函数变得可用,因为to_char不 * 将字符串作为输入,而是日期或数字 (这就是为什么你得到这个错误)。
SQL> select to_char(to_date(test1,'mm/dd/yyyy hh:mi:ss am'),'hh24:mi:ss') from t; TO_CHAR( -------- 02:20:55
理想情况下,您希望将表列定义为日期,此时,to_char将直接在该列上工作。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




