Как выбрать столбец даты для между?"SQL" - PullRequest
0 голосов
/ 08 октября 2018

У меня есть эти столбцы, мне нужно выбрать даты от 2018/01/01 до 2018/07/07.но все эти столбцы должны быть в этом графике.Где я ошибаюсь в этом выборе?

Ответы [ 3 ]

0 голосов
/ 08 октября 2018

Прежде всего, вам следует явно преобразовать строку в дату, а не полагаться на неявное преобразование.Ваша строка в 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')
0 голосов
/ 08 октября 2018

Обычно вы не можете сложить столбцы в предложении 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'
0 голосов
/ 08 октября 2018

Ваше предложение where выглядит совершенно неверно, но на этот раз вам нужно использовать TO_DATE():

TRM.DUE_DAYS BETWEEN TO_DATE('2018/01/01','yyyy/mm/dd') AND TO_DATE('2018/07/07','yyyy/mm/dd')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...