如何拆分emp表中ETIME列的日期与时间?
Oracle TIMESTAMP字段拆分日期与时间的正确SQL语句
表结构与数据示例
字段定义
ID NUMBER ENAME VARCHAR2(20) EDATE DATE ETIME TIMESTAMP(6)
示例数据
| ID | ENAME | EDATE | ETIME |
|---|---|---|---|
| 1 | Kunal | 15-03-23 | |
| 2 | Rohit | 15-03-23 | 31-01-97 9:26:50.124000000 AM |
| 3 | Sakshi | 15-03-23 | 31-01-97 9:26:50.124000000 AM |
问题说明
用户尝试执行以下SQL拆分ETIME字段的日期与时间,但执行失败:
SELECT DATE(etime) AS date, TIME(etime) AS time FROM emp;
正确的SQL语句
Oracle不存在DATE()、TIME()这类通用函数,需使用Oracle原生函数实现拆分:
方法1:返回日期/时间原生类型
如果需要保留日期、时间的原生数据类型:
SELECT TRUNC(ETIME) AS date_part, -- 提取日期部分,返回DATE类型 CAST(ETIME AS TIMESTAMP) - TRUNC(ETIME) AS time_part -- 提取时间部分,返回INTERVAL DAY TO SECOND类型 FROM emp;
方法2:返回指定格式的字符串
如果需要返回自定义格式的字符串结果:
SELECT TO_CHAR(ETIME, 'DD-MM-RR') AS date_str, -- 匹配示例的日期格式 TO_CHAR(ETIME, 'HH:MI:SS.FF6 AM') AS time_str -- 保留微秒的时间格式 FROM emp;
处理空值场景
针对ETIME字段存在空值的情况(如ID=1的记录),可以用NVL处理空值:
SELECT NVL(TO_CHAR(ETIME, 'DD-MM-RR'), '无日期') AS date_str, NVL(TO_CHAR(ETIME, 'HH:MI:SS.FF6 AM'), '无时间') AS time_str FROM emp;
内容的提问来源于stack exchange,提问作者Kunal Verma
相关产品推荐
相关产品推荐

