SQL使用文本字段编号查询当前年份的固定时间范围

时间:2016-11-09 18:12:55

标签: sql oracle

我有一个文本字段,其格式为以下格式: 20020807; 20150806; 20161025

我需要做的是运行sql来收集当前系统年份并收集上面这个文本字段的前4位数字(这得到我们一年的值)并选择过去具有年份值的所有记录3年。 因此,使用上面的3个示例,结果将仅返回最后2个记录。请注意,这是一个Oracle数据库。

我有一些sql可以从前4位数字中收集特定值: SELECT * FROM customer_link WHERE SUBSTR(TEST_DATE, 1,4) IN ('2002')。注意我不想明确输入年份,而是动态查询当前年份的过去3年。

有点收集当年:SELECT TO_CHAR(sysdate, 'YYYY') FROM dual

但需要一些帮助将各个部分放在一起。 谢谢!

2 个答案:

答案 0 :(得分:0)

无论我在评论问题中向您提出的问题的答案如何,处理数据的更好方法是使用DATE数据类型中的所有内容。

例如,如果test_date是八个字符的字符串,例如20140208,并且您希望所有值都在2016年1月1日之后的三年内,则表示从2013年1月1日至今的所有日期,那么你可以像这样使用WHERE子句:

... where to_date(test_date, 'yyyymmdd') between add_months(trunc(sysdate'y'), -36) 
                                         and     sysdate

trunc(sysdate, 'y')返回当前年份的1月1日,add_months()添加(或减去,如果第二个参数为负数)指定的月数。 add_years(..., -3)也会很好,但在Oracle中不存在

答案 1 :(得分:0)

这应该可行,但希望对您的表进行全面扫描:

Dog.bark