表stime有一列begintime,此列为date类型,现在需要查询时刻,并按照时刻分组,统计数量。
比方有一个记录begintime为'2010-5-19 17:26:04',如何变成'2010-5-19 17点2刻'呢?原本想截取出来分钟数26,然后写一个函数将26转化成2刻,但是觉得太麻烦了,不知道大家有没有比较好的办法呢?
比方有一个记录begintime为'2010-5-19 17:26:04',如何变成'2010-5-19 17点2刻'呢?原本想截取出来分钟数26,然后写一个函数将26转化成2刻,但是觉得太麻烦了,不知道大家有没有比较好的办法呢?
比方一个月 1号到7号为第一周 8号到14号位第二周 15号到21号为第三周 22号到28号为第四周 29到月底为第五周,有一个记录begintime为'2010-5-19 17:26:04',如果我不写专门的函数来处理,如何通过简单的sql来 将之变成'2010年5月第四周'呢?
SELECT to_char(a,'yyyy-mm-dd hh24"点"')||round(to_char(a,'mi')/15)||'刻'
from (select to_date('2010-5-19 17:26:04','yyyy-mm-dd hh24:mi:ss') a from dual);
这里还有四舍五入这么进位的问题,大致想法就是这样。或者用case when
2.
SELECT to_char(a,'yyyy"年"mm"月第"w"周"')
from (select to_date('2010-5-19 17:26:04','yyyy-mm-dd hh24:mi:ss') a from dual)
SELECT to_char(begintime,'yyyy')||'年'||
to_number(to_char(begintime,'mm'))||'月'||
CASE
WHEN to_char(begintime,'DD') >='01' AND to_char(begintime,'DD') <='07' THEN '第一周'
WHEN to_char(begintime,'DD') >='08' AND to_char(begintime,'DD') <='14' THEN '第二周'
WHEN to_char(begintime,'DD') >='15' AND to_char(begintime,'DD') <='21' THEN '第三周'
WHEN to_char(begintime,'DD') >='22' AND to_char(begintime,'DD') <='28' THEN '第四周'
WHEN to_char(begintime,'DD') >='29' THEN '第五周' END ||
to_char(begintime,'HH24')||'点'||
CASE
WHEN to_char(begintime,'MI') >='01' AND to_char(begintime,'MI') <='15' THEN '1刻'
WHEN to_char(begintime,'MI') >='16' AND to_char(begintime,'MI') <='30' THEN '2刻'
WHEN to_char(begintime,'MI') >='31' AND to_char(begintime,'MI') <='45' THEN '3刻'
WHEN to_char(begintime,'MI') >='46' AND to_char(begintime,'MI') <='60' THEN '4刻'
END AS ceshi
FROM (SELECT SYSDATE AS begintime FROM dual) a
谢谢,四舍五入的时候 round改用floor即可。