我有这些列,我需要从2018/01/01
到2018/07/07
中选择日期。但所有这些列都必须在此时间轴中。
这个选择在哪里出问题了?
答案 0 :(得分:0)
您的where子句看起来完全错误,但是有一次,您需要使用TO_DATE()
:
TRM.DUE_DAYS BETWEEN TO_DATE('2018/01/01','yyyy/mm/dd') AND TO_DATE('2018/07/07','yyyy/mm/dd')
答案 1 :(得分:0)
首先,您应该将字符串显式转换为日期,而不是依赖隐式转换。根据某些人的yyyy-mm-dd
参数,您在nls_date_format
中的字符串会失败。您可以通过to_date()
转换字符串,例如to_date('01/01/2018', 'dd/mm/yyyy')
。
第二,WHERE
语句中的条件必须包含我们比较的列名,运算符(例如<
)和值。 BETWEEN
也是运算符,然后将其转换为两个条件:<=
和>=
。
因此,仅列出列是行不通的,因为它缺少运算符和要比较的值。
因此,如果您不想基于某些列进行过滤,只需不要将其包括在WHERE
子句中。
或者,如果您希望所有这些列都用当年的日期进行过滤(但列名表明它们不是日期。),则可以编写:
WHERE (ACT.BANK_ACCOUNT_ID BETWEEN '2018-01-01' AND '2018-07-07') AND
(ACT.BANK_ACCOUNT_NAME BETWEEN '2018-01-01' AND '2018-07-07') AND
(BRA.STATE BETWEEN '2018-01-01' AND '2018-07-07') AND
(BRA.COUNTRY BETWEEN '2018-01-01' AND '2018-07-07') AND
(ACT.DESCRIPTION BETWEEN '2018-01-01' AND '2018-07-07') AND
(TRM.DUE_DAYS BETWEEN '2018-01-01' AND '2018-07-07')
答案 2 :(得分:0)
通常不能在WHERE子句中堆叠列。您需要阐明每个条件。即
WHERE
ACT.BANK_ACCOUNT_ID between '2018-01-01' and '2018-07-07'
and
ACT.BANK_ACCOUNT_NAME between '2018-01-01' and '2018-07-07'
and
...
and
TRM.DUE_DAYS '2018-01-01' and '2018-07-07'