从 ID 中提取日期并获取最近一年的数据
extract the date from ID and get the data for last one year
我有以下查询,我可以在其中使用 to_date(substr(id, 1, 14), 'YYYYMMDDHH24MISS')
从 id 列中提取日期。但是现在我想从 id 列中获取过去一年的数据来比较这个日期。
select count(*) as cnt from in_test where id > 201200000000000000 and status not in (0,1)
如果要获取等于或晚于一年前今天的数据,则:
where id >= to_number(to_char(add_months(sysdate,-12), 'YYYYMMDD'))*10000000000
这假设您在问题中给出了正确的位数。否则,您可能需要 append/remove 从该最终数字中取一些零。
今天,右边的表达式得出这个数字:
201508310000000000
解释
sysdate
是 Oracle 获取当前时间戳的方式 datetime
.
add_months(...,-1)
从该日期减去 1 年,所以如果我们今天(2016 年 8 月 31 日)这样做,我们会得到 201510831
.
to_char(..., 'YYYYMMDD')
将该日期时间转换为字符串,格式为 YYYYMMDD
。所以这将导致字符串 20150831
.
to_number(...)
将该字符串转换为数字数据类型,即 20150831
.
*10000000000
乘以该数字,使其获得与您的 id
范围相同的范围,从而得出最终结果 201508310000000000
.
我有以下查询,我可以在其中使用 to_date(substr(id, 1, 14), 'YYYYMMDDHH24MISS')
从 id 列中提取日期。但是现在我想从 id 列中获取过去一年的数据来比较这个日期。
select count(*) as cnt from in_test where id > 201200000000000000 and status not in (0,1)
如果要获取等于或晚于一年前今天的数据,则:
where id >= to_number(to_char(add_months(sysdate,-12), 'YYYYMMDD'))*10000000000
这假设您在问题中给出了正确的位数。否则,您可能需要 append/remove 从该最终数字中取一些零。
今天,右边的表达式得出这个数字:
201508310000000000
解释
sysdate
是 Oracle 获取当前时间戳的方式 datetime
.
add_months(...,-1)
从该日期减去 1 年,所以如果我们今天(2016 年 8 月 31 日)这样做,我们会得到 201510831
.
to_char(..., 'YYYYMMDD')
将该日期时间转换为字符串,格式为 YYYYMMDD
。所以这将导致字符串 20150831
.
to_number(...)
将该字符串转换为数字数据类型,即 20150831
.
*10000000000
乘以该数字,使其获得与您的 id
范围相同的范围,从而得出最终结果 201508310000000000
.