我有一个包含多个日期的列的表格如下?
15-JAN-2018 07:18:09
13-JAN-2018 09:09:19
15-JAN-2018 05:29:21
15-JAN-2018 05:30:26
13-JAN-2018 07:23:19
13-JAN-2018 02:30:12
14-JAN-2018 02:30:12
14-JAN-2018 03:30:12
是否可以将所有这些日期转换为关于小时/分钟的第12个日期,如下所示:
12-JAN-2018 07:18:09
12-JAN-2018 09:09:19
12-JAN-2018 05:29:21
12-JAN-2018 05:30:26
12-JAN-2018 07:23:19
12-JAN-2018 02:30:12
12-JAN-2018 02:30:12
12-JAN-2018 03:30:12
答案 0 :(得分:2)
如果我理解得很清楚你可能需要这样的东西。
开始数据:
SQL> select * from dates;
D
-------------------------------------------------
15-JAN-18 12:34:45,000000000
14-JAN-18 12:12:45,000000000
11-JAN-18 12:34:45,000000000
12-JAN-18 12:00:45,000000000
更新
SQL> update dates
2 set d = d - trunc(d) + date '2018-01-12';
4 rows updated.
结果:
SQL> select * from dates;
D
-------------------------------------------------
12-JAN-18 12:34:45,000000000
12-JAN-18 12:12:45,000000000
12-JAN-18 12:34:45,000000000
12-JAN-18 12:00:45,000000000
这只是将时间作为开始日期的一部分,并将其添加到2018-01-12 00:00
答案 1 :(得分:2)
你可以在这里使用这个概念:
select sysdate,
to_date( '12'||to_char(sysdate,'MMYYYYHH24MISS'), 'DDMMYYYYHH24MISS' )
from dual;
将sysdate
替换为您的字段名称(在第二个选定元素中),将dual
替换为您的表名。
这会通过预先设置您想要的月份日期来重新构建日期。由于我们已经将'MMYYYYHH24MISS'
传入的格式定义为12
,因此DD
就像对iNetworkSubscriber
部分进行硬编码一样。
上面的select语句从概念上演示了您需要做什么。在不知道你的专栏名称和表格名称的情况下,很难构建一个确切的答案,但我认为如果你完全按照它所写的那样执行上述陈述,你将会得到它的要点(它&& #39; s无害)。
答案 2 :(得分:2)
您可以按日间隔进行调整:
your_date - numtodsinterval(extract(day from your_date) - 12, 'DAY')
演示:
alter session set nls_date_format = 'YYYY-MM-DD HH24:MI:SS';
with t (dt) as (
select to_date('15-JAN-2018 07:18:09', 'DD-MON-YYYY HH24:MI:SS') from dual
union all select to_date('13-JAN-2018 09:09:19', 'DD-MON-YYYY HH24:MI:SS') from dual
union all select to_date('15-JAN-2018 05:29:21', 'DD-MON-YYYY HH24:MI:SS') from dual
union all select to_date('15-JAN-2018 05:30:26', 'DD-MON-YYYY HH24:MI:SS') from dual
union all select to_date('13-JAN-2018 07:23:19', 'DD-MON-YYYY HH24:MI:SS') from dual
union all select to_date('13-JAN-2018 02:30:12', 'DD-MON-YYYY HH24:MI:SS') from dual
union all select to_date('14-JAN-2018 02:30:12', 'DD-MON-YYYY HH24:MI:SS') from dual
union all select to_date('14-JAN-2018 03:30:12', 'DD-MON-YYYY HH24:MI:SS') from dual
)
select dt, dt - numtodsinterval(extract(day from dt) - 12, 'DAY')
from t;
DT DT-NUMTODSINTERVAL(
------------------- -------------------
2018-01-15 07:18:09 2018-01-12 07:18:09
2018-01-13 09:09:19 2018-01-12 09:09:19
2018-01-15 05:29:21 2018-01-12 05:29:21
2018-01-15 05:30:26 2018-01-12 05:30:26
2018-01-13 07:23:19 2018-01-12 07:23:19
2018-01-13 02:30:12 2018-01-12 02:30:12
2018-01-14 02:30:12 2018-01-12 02:30:12
2018-01-14 03:30:12 2018-01-12 03:30:12
extract(day from your_date)
会为您提供日期编号,例如从中减去12可以得出每个值与当月12日之间的天数差异(样本中总是为正值,但也可能为负值)。 numtodsinterval()
function转换为间隔的偏移量。并且该间隔应用于原始值。