在SQL中,我有一个DATE变量,我想要舍入到下一个可用的半小时(即xx:30).请注意,这不应该是最近的半小时.
这里有些例子:
Time Expected outcome
2012-03-26 11:25 AM 2012-03-26 11:30 AM
2012-03-26 11:45 AM 2012-03-26 12:30 PM
Run Code Online (Sandbox Code Playgroud)
有没有办法在SQL中执行此操作?
Jus*_*ave 11
这有点令人费解,但有点像
SELECT round( (date_col - trunc(date_col)) * 48 )/ 48 +
trunc( date_col )
FROM dual
Run Code Online (Sandbox Code Playgroud)
应该管用.
SQL> ed
Wrote file afiedt.buf
1 select round((sysdate - trunc(sysdate)) * 48)/48 + trunc(sysdate),
2 sysdate
3* from dual
SQL> /
ROUND((SYSDATE-TRUNC SYSDATE
-------------------- --------------------
26-mar-2012 14:30:00 26-mar-2012 14:35:30
Run Code Online (Sandbox Code Playgroud)
TRUNC(date_col) 截断时间到午夜.date_col - trunc(date_col) 返回自午夜以来已过去的一天的分数.trunc(date_col)给贾斯汀的原创性回答+1.
如果你想要一个更迂腐(或者,更容易理解或维护)的方法,
select case when to_number(to_char(sysdate,'mi')) > 30
then trunc(sysdate,'mi') + ((60 - to_number(to_char(sysdate,'mi')) +30)/1440)
else trunc(sysdate,'mi') + (30 - to_number(to_char(sysdate,'mi')))/1440 end
from dual
Run Code Online (Sandbox Code Playgroud)
我只是把它丢在那里,因为如果你需要做一些与其他数字类似的东西,比如像一小时45分钟那样,这可能是一种更具适应性的方法.你只需用45s取代三个30s就可以了.
但是,就性能而言,对于你的确切问题 - 贾斯汀是一个真正的赢家.
| 归档时间: |
|
| 查看次数: |
10307 次 |
| 最近记录: |