从 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.