我正在尝试获取具有所有时间戳列的记录。
我使用以下查询来获取在最终日期和(最终日期 - 30)天之间创建的产品,即在过去30天内创建的产品,这些产品属于最终日期'范围。
我的产品是在2014年10月30日创建的。对于相同的产品,发起日期为2014年11月12日。但是,当我使用以下查询时,它们不会被提取。
SELECT A.ROW_ID,
A.PROD_NAME
FROM PROD A,
PROD_REL B
WHERE A.ROW_ID = B.PAR_ROW_ID
AND TO_DATE(A.CREATED_DT,'YYYY-MM-DD') BETWEEN (TO_DATE(B.FINAL_DATE,'YYYY-MM-DD') - 30)
AND (TO_DATE(B.FINAL_DATE,'YYYY-MM-DD'));
所以,如果我错过了什么,你能告诉我吗?
以下是指示问题的SQLFiddle链接。
答案 0 :(得分:1)
答案 1 :(得分:0)
由于您的数据类型都是日期,因此无需使用to_date
。事实上,这是有害的,因为to_date
不会将date
作为参数。 Oracle必须使用会话的NLS_DATE_FORMAT
进行从日期到字符串的隐式转换,该会话的to_date
会传递到WHERE
并使用您指定的显式格式掩码转换回日期。如果两次转换没有使用相同的格式掩码,则会发生不好的事情。
您的AND a.created_dt BETWEEN b.final_date - 30
AND b.final_date
条款只需要
{{1}}
如果我进行了更改,your SQLFiddle会返回两行