我有一个文本字段,其格式为以下格式:
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
但需要一些帮助将各个部分放在一起。 谢谢!
答案 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