如何选择之间的列日期? “ SQL”

时间:2018-10-08 14:17:27

标签: sql oracle

我有这些列,我需要从2018/01/012018/07/07中选择日期。但所有这些列都必须在此时间轴中。 这个选择在哪里出问题了?

3 个答案:

答案 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'