我找不到两个日期的差的结果,我的fortmat是'YYYY-Q‘
select MAX(t.period), MIN(t.period) from table t我还想放入MAX(t.period)-MIN(t.period)列。当我尝试将它从日期转换为字符时,我遇到了问题(ORA-01722错误的数字)
select MAX(t.period), MIN(t.period) to_char(MAX(t.period), 'YYYY-Q') from table t 当我尝试放入to_date时,我也遇到了问题(ORA-01820:格式代码不能以日期输入格式出现)
select MAX(t.period), MIN(t.period) to_date(MAX(t.period), 'YYYY-Q') from table t我只想让两个日期不同,不能做单一的转换…我的period列的格式与我放入'YYYY-Q‘的格式相同,例如,如果我有2005-4日期- 2004-2日期,我想得到6个结果,这是可能的吗?
发布于 2018-08-30 18:12:59
您可以使用以下命令将期间的年组成换算为年初:
TO_DATE( SUBSTR( period, 1, 4 ) || '0101', 'YYYYMMDD' )然后,您可以使用以下命令为第一个季度以外的每个季度添加3个月:
ADD_MONTHS(
TO_DATE( SUBSTR( period, 1, 4 ) || '0101', 'YYYYMMDD' ),
3 * ( SUBSTR( period, 6, 1 ) - 1 )
)然后,您可以使用MONTHS_BETWEEN找出日期之间的差值,并除以3得到季度差值。
SQL Fiddle
Oracle 11g R2架构设置
CREATE TABLE table_name ( period ) AS
SELECT '2005-4' FROM DUAL UNION ALL
SELECT '2004-2' FROM DUAL;查询1
SELECT MIN( period ) || ' - ' || MAX( period ) AS range,
MONTHS_BETWEEN( MAX( period_start ), MIN( period_start ) ) / 3
AS quarters_difference
FROM (
SELECT period,
ADD_MONTHS(
TO_DATE( SUBSTR( period, 1, 4 ) || '0101', 'YYYYMMDD' ),
3 * ( SUBSTR( period, 6, 1 ) - 1 )
) period_start
FROM table_name
)| RANGE | QUARTERS_DIFFERENCE |
|-----------------|---------------------|
| 2004-2 - 2005-4 | 6 |发布于 2018-08-30 18:52:47
您可以在“季度”而不是日期(或月份)空间中进行算术运算。
因此,将一个句号转换为若干个季度。例如,2000-1可以转换为2000 *4+1= 80001。这些数字之间的差异就是您想要的。
所以:
select ( ( substr(max(period), 1, 4) * 4 + substr(max(period), -1) ) -
( substr(min(period), 1, 4) * 4 + substr(min(period), -1) )
) as diff_q请注意,这使用了隐式转换,如果您的所有值确实都遵循这种格式,那么隐式转换就可以了。
https://stackoverflow.com/questions/52093966
复制相似问题