oracle日期格式转换问题 如何将ORACLE中的这种日期格式:2010-5-7 下午 12:00:00转换成:2010-5-7 24:00:00谢谢。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 alter session set nls_date_format = 'yyyy-mm-dd hh24:mi:ss'; select to_date(datetime,'YYYY-MM-DD HH24:MI:SS','NLS_DATE_LANGUAGE = American') from tb --下午12点 是不是晚上24点也就是零点SQL> edi已写入 file afiedt.buf 1 select to_char(to_date('2010-5-7 12:00:00','yyyy-mm-dd hh24:mi:ss')+interval '12' hour, 2* 'yyyy-mm-dd hh24:mi:ss') from dualSQL> /TO_CHAR(TO_DATE('20-------------------2010-05-08 00:00:00 你的这个时间是怎么插成这样的?是to_date('','YYYYMMDDHH24MISS')就这接变成这样了还是你的格式有什么特殊处理 alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss' 如果你是用的SQLPLUS, 那么: alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss'如果你用的是PL /SQL DEVELOPER工具,那么: TOOL --> PREFERENCE -->USER INTERFACE -->DATA/TIME 进行显示设置 select to_date(replace('2010-5-7 下午 11:00:00','下午',''),'YYYY-MM-DD HH24:MI:SS')+(case when instr('2010-5-7 下午 11:00:00','下午')>0 then 12/24 else 0 end)from dual 可以看下这个命令的适用范围,是修改当前SESSION,另外这不能修改第三方工具的日期格式,如:PL/SQL DEVELOPER需要在Tools->Preferences->User Interface->Date/Time下修改格式即可,第三方工具的日期格式在工具内部自己去设置,我估计你也应该在第三方工具下才会看到这样的效果,一般默认情况下ORACLE默认的日期格式不是这样的。在默认的sqlplus或者sqlplusw下或者程序编写过程中,执行该命令后,如果是同一个session是肯定会产生你要的效果。如果要将整体的数据库级别默认格式改掉需要修改参数文件,并重启数据库才可以,但是这个也改不掉你第三方工具的显示格式,第三方工具只能在工具内部去改,它只能改掉默认的日期格式,第三方工具都是转换后的;但是很多时候容易被工具所忽悠,给人的感觉就是数据库就是这样存储的,其实存储的只有日期格式,没有YYYYMM这些东西,这些东西都是通过算法计算出来的结果,然后根据格式要求进行对应的格式化给看到的这样的效果而已。 SELECT TO_CHAR(SYSDATE, 'HH24:MI:SS') FROM DUAL; 17:40:18SELECT TO_CHAR(SYSDATE, 'HH12:MI:SS') FROM DUAL;05:40:18至于 数据库到底存成什么格式的话并不影响使用吧 oracle date类型有自己的存储方式,你转换也只能转换成字符串的显示方式,而没有改变date类型,另外date类型的每个域是有限制的,比如小时是0-23,哪有24的啊,所有的日期都没有24的DINGJUN123>select to_date('2010050623','yyyymmddhh24') from dual;TO_DATE('20100--------------06-5月 -10DINGJUN123>alter session set nls_date_format='yyyymmdd hh24:mi:ss';会话已更改。DINGJUN123>/会话已更改。DINGJUN123>select to_date('2010050623','yyyymmddhh24') from dual;TO_DATE('20100506-----------------20100506 23:00:00DINGJUN123>alter session set nls_date_format='yyyymmdd hh:mi:ss';会话已更改。DINGJUN123>select to_date('2010050623','yyyymmddhh24') from dual;TO_DATE('20100506-----------------20100506 11:00:00DINGJUN123>alter session set nls_date_format='yyyymmdd hh24:mi:ss,am';ERROR:ORA-01818: 'HH24' 不使用上下午指示符DINGJUN123>alter session set nls_date_format='yyyymmdd hh:mi:ss,am';会话已更改。DINGJUN123>select to_date('2010050623','yyyymmddhh24') from dual;TO_DATE('2010050623','----------------------20100506 11:00:00,下午 非常感谢楼上的各位慷慨解答,现在有个很奇怪的问题:select to_char(sysdate,'yyyy:mm:dd hh24:mi:ss') from dual;得出的结果是:2010:05:07 18:42:11但是如果换成:to_char(begin_time,'yyyy:mm:dd hh24:mi:ss'),把sysdate换成类型为DATE的列,就转换不过来了,比如:如果begin_time的值是:2010-5-7 下午 12:00:00,转换后就成了:2010:05:07 11:00:00 我也不知道为什么 我按照你们给出的方式设置 查出来的效果还是跟原来一样 是不是oracle10g 的问题? 怎么改变表中字段的值? 有关Orcale 性能的监视日志 oracle数据库计算问题 该用哪个版本的Oracle? 获得表里名称、类别相同,价格不同的价格平均值的前后10%的数据,SQL语句怎么写啊 ORA-01017: invalid username/password; logon denied 请问神州数码易飞ERP的报价是多少 OEM中作业调度的设置:能否有每天的固定一个时间点 请问 oracle 导出中文乱码 oracle 关于rowid 一条语句怎么写 oracle数据库如何循环取表的列值
--下午12点 是不是晚上24点也就是零点
SQL> edi
已写入 file afiedt.buf 1 select to_char(to_date('2010-5-7 12:00:00','yyyy-mm-dd hh24:mi:ss')+interval '12' hour,
2* 'yyyy-mm-dd hh24:mi:ss') from dual
SQL> /TO_CHAR(TO_DATE('20
-------------------
2010-05-08 00:00:00
是to_date('','YYYYMMDDHH24MISS')就这接变成这样了还是你的格式有什么特殊处理
alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss'如果你用的是PL /SQL DEVELOPER工具,那么:
TOOL --> PREFERENCE -->USER INTERFACE -->DATA/TIME 进行显示设置
+(case when instr('2010-5-7 下午 11:00:00','下午')>0 then 12/24 else 0 end)
from dual
17:40:18SELECT TO_CHAR(SYSDATE, 'HH12:MI:SS') FROM DUAL;
05:40:18
至于 数据库到底存成什么格式的话并不影响使用吧
另外date类型的每个域是有限制的,比如小时是0-23,哪有24的啊,所有的日期都没有24的DINGJUN123>select to_date('2010050623','yyyymmddhh24') from dual;TO_DATE('20100
--------------
06-5月 -10DINGJUN123>alter session set nls_date_format='yyyymmdd hh24:mi:ss';会话已更改。DINGJUN123>/会话已更改。DINGJUN123>select to_date('2010050623','yyyymmddhh24') from dual;TO_DATE('20100506
-----------------
20100506 23:00:00DINGJUN123>alter session set nls_date_format='yyyymmdd hh:mi:ss';会话已更改。DINGJUN123>select to_date('2010050623','yyyymmddhh24') from dual;TO_DATE('20100506
-----------------
20100506 11:00:00DINGJUN123>alter session set nls_date_format='yyyymmdd hh24:mi:ss,am';
ERROR:
ORA-01818: 'HH24' 不使用上下午指示符
DINGJUN123>alter session set nls_date_format='yyyymmdd hh:mi:ss,am';会话已更改。DINGJUN123>select to_date('2010050623','yyyymmddhh24') from dual;TO_DATE('2010050623','
----------------------
20100506 11:00:00,下午
select to_char(sysdate,'yyyy:mm:dd hh24:mi:ss') from dual;
得出的结果是:2010:05:07 18:42:11
但是如果换成:to_char(begin_time,'yyyy:mm:dd hh24:mi:ss'),把sysdate换成类型为DATE的列,就转换不过来了,比如:如果begin_time的值是:2010-5-7 下午 12:00:00,
转换后就成了:2010:05:07 11:00:00
是不是oracle10g 的问题?