INSERT INTO DELLL (
DATETIMEMY)
SELECT to_date(to_char(SU_MODIFYDATE, 'YYYY/MM/DD'),'YYYY/MM/DD') AS DATETIMEMY
FROM SER_TBLSERVICES WHERE SVE_SERVICEID=422
SU_MODIFYDATE = 01/18/2013
但在DELLL日期(DATETIMEMY)格式插入后仍然相同仍然相同
DATETIMEMY = 01/18/2013
答案 0 :(得分:2)
你没有为DATE
分配格式。它们在内部存储为数字,没有格式。当您想要选择日期时,格式会出现。所以在你的情况下你应该这样做:
首先按原样插入日期,不要尝试将其转换为char并再次返回:
SQL> INSERT INTO DELLL (
2 DATETIMEMY) SELECT SU_MODIFYDATE
3 FROM SER_TBLSERVICES WHERE SVE_SERVICEID=422;
1 row created.
现在要以特定格式选择它,您可以使用TO_CHAR
对其进行格式化。
SQL> select * from delll;
DATETIMEMY
----------
01/18/2013 <-- which isn't what you want to see, you wanted to see yyyy/mmm/dd. so...
SQL> select to_char(DATETIMEMY,'yyyy/mm/dd') DATETIMEMY from DELLL
2 /
DATETIMEMY
----------
2013/01/18
或者,要应用于该会话中具有date
数据类型的所有选择,您可以更改默认显示格式:
SQL> alter session set nls_date_format='yyyy/mm/dd';
Session altered.
SQL> select * from delll;
DATETIMEMY
----------
2013/01/18
答案 1 :(得分:0)
示例中的INSERT或SELECT不会修改日期的存储方式。使用当前连接格式首选项/区域设置选择它们时,将对日期进行格式化。
您正在使用TO_DATE,选择返回的值与任何其他日期相同,它将根据区域设置进行格式化。
答案 2 :(得分:0)
DazzaL的答案正确,其中讨论了日期的格式化,存储和检索。
我想讨论你在代码中做了什么。
Oracle将日期存储到精确到秒。简单来说,您可以MM/DD/YYYY HH24:MI:SS
格式检索日期。
通过发出to_date(to_char(SU_MODIFYDATE, 'YYYY/MM/DD'),'YYYY/MM/DD')
,您实际上将截止日期截至日期部分。因此,当您尝试检索此值时,HH24:MI:SS
部分将00:00:00
,因为您截断了日期。
如果您希望将SU_MODIFYDATE
中的所有详细信息(从年,月,日,时,分和秒)插入DELLL
的列中,您应该只使用
INSERT INTO DELLL (
DATETIMEMY)
SELECT SU_MODIFYDATE AS DATETIMEMY
FROM SER_TBLSERVICES WHERE SVE_SERVICEID=422
这将确保SU_MODIFYDATE
列中的所有日期部分都插入到新列中。
如果您要截断日期,例如,使用to_date(to_char(SU_MODIFYDATE, 'YYYY/MM/DD HH24:MI'),'YYYY/MM/DD HH24:MI')
同样,您可以根据自己的选择截断从年份到第二部分的日期。
如果要插入截断日期,则应使用已有的查询。如果您要插入日期及其所有部分,请使用to_char
和to_date
来避免截断。