我要做的是创建两个时间戳,StartDate
时间戳为09/08/2015 00:00:00
,EndDate
时间戳应为09/08/2015 23:59:59
,就像它一样简单要在MS SQL中实现,我无法找到Make_Date
函数或Add_Days
函数来获取Oracle PL SQL中的任何一个时间戳。
任何人都可以帮助我吗?
答案 0 :(得分:5)
不是使用小数86399 / 86400
(这需要在查看代码以查看为什么选择这些神奇数字时需要一些工作)才能获得结束日期,您可以使用INTERVALS
明确说明时间段(一眼就能看出你在做什么):
Oracle 11g R2架构设置:
查询1 :
SELECT TRUNC( CURRENT_DATE ) AS START_DATE,
TRUNC( CURRENT_DATE ) + INTERVAL '1' DAY - INTERVAL '1' SECOND AS END_DATE
FROM DUAL
<强> Results 强>:
| START_DATE | END_DATE |
|-----------------------------|-----------------------------|
| September, 08 2015 00:00:00 | September, 08 2015 23:59:59 |
答案 1 :(得分:3)
使用 TO_DATE 将字符串转换为日期。
SQL> alter session set nls_date_format='mm/dd/yyyy hh24:mi:ss';
Session altered.
SQL> SELECT to_date('09/08/2015 00:00:00' ,'mm/dd/yyyy hh24:mi:ss') start_date,
2 to_date('09/08/2015 23:59:59' ,'mm/dd/yyyy hh24:mi:ss') end_date
3 FROM dual;
START_DATE END_DATE
------------------- -------------------
09/08/2015 00:00:00 09/08/2015 23:59:59
SQL>
您还可以使用 ANSI TIMESTAMP Literal 。
SQL> SELECT TIMESTAMP '2015-08-09 00:00:00' start_date,
2 TIMESTAMP '2015-08-09 23:59:59' end_date
3 FROM dual;
START_DATE END_DATE
---------------------------- -------------------------------
09-AUG-15 12.00.00.000000000 09-AUG-15 11.59.59.000000000 PM
SQL>
更新 OP希望日期文字是动态的。
SQL> SELECT TRUNC(SYSDATE) start_date,
2 TRUNC(SYSDATE) + 86399 / 86400 end_date
3 FROM dual;
START_DATE END_DATE
------------------- -------------------
09/08/2015 00:00:00 09/08/2015 23:59:59
更新2 OP想知道时间部分隐藏在日期中的原因。
SQL> alter session set nls_date_format='mm/dd/yyyy';
Session altered.
SQL> SELECT sysdate FROM DUAL;
SYSDATE
----------
09/08/2015
SQL> alter session set nls_date_format='mm/dd/yyyy hh24:mi:ss';
Session altered.
SQL> SELECT sysdate FROM DUAL;
SYSDATE
-------------------
09/08/2015 15:46:14
那么,上面发生了什么?相同的 SYSDATE 会返回两个不同的值。原因是 DATE 同时包含 datetime 元素,您看到的内容取决于您的区域设置特定NLS设置所驱动的显示属性。
使用 TO_CHAR 将日期转换为字符串,以便在您的帐号中显示 期望的格式。
答案 2 :(得分:2)
使用表中的值:
SELECT
DATE_VALUE,
TRUNC(DATE_VALUE) START_DATE,
TRUNC(DATE_VALUE) + 86399 / 86400 END_DATE
FROM
(SELECT SYSDATE - LEVEL + 1 DATE_VALUE FROM DUAL CONNECT BY LEVEL <= 10)