我想在Oracle的sql日期找到一季度。
我在下面的查询中尝试查找年份,季度和星期。 但周字段给出了本月的一周'不是本季度的一周'
选择to_char(sysdate,' YYYY')|| ' -Q' || to_char(sysdate,' Q')|| ' -W' || > to_char(sysdate,' w')as"当前时间" 来自双重;
以上查询返回' 2016-Q2-W3'因为日期是在该月的第3周。
说sysdate是' 2016年6月17日' 我期待结果为
2016-Q2-的 W12
我的周范围是(周日 - 周六)
自2016年6月17日'在本季度的第12周,它应该是W12。
提前致谢。
答案 0 :(得分:2)
这将是本季度的一周(周日至周六):
SELECT TO_CHAR( SYSDATE, 'YYYY-"Q"Q-"W"' )
|| ( 7 + TRUNC( SYSDATE + 1, 'IW' ) - TRUNC( TRUNC( SYSDATE, 'Q' ) + 1, 'IW' ) ) / 7;
AS "Current Time"
FROM DUAL
<强>解释强>:
NEXT_DAY( TRUNC( date_value ), 'SUNDAY' ) - 7
(取决于NLS_TERRITORY
设置)或TRUNC( date_value + 1, 'IW' ) - 1
(更短)找到指定日期之前或之前的星期日并且不依赖于任何设置。)TRUNC( date_value, 'Q' )
给出包含value
日期(即1月1日,4月1日,7月1日或10月1日)的季度第一天的日期。TRUNC( TRUNC( date_value, 'Q' ) + 1, 'IW' ) - 1
( TRUNC( date_value + 1, 'IW' ) - 1 ) - ( TRUNC( TRUNC( date_value, 'Q' ) + 1, 'IW' ) - 1 )
- 可以简化为取消-1
条款。