Диапазон дат запроса Sql в обратном порядке

Кто-нибудь знает, могу ли я сделать обратное между?

Что-то вроде этого:

SELECT * 
FROM TABLE 
WHERE '01-01-2014' BETWEEN 'field1' AND 'field2';
2 ответа

Если "наоборот" означает "не между", вы можете:

where '2014-01-01' not between field1 and field2

Вы должны использовать YYYY-MM-DD для констант даты (стандарт ISO). Или явно конвертировать из строки в дату, используя определенную функцию преобразования.


SELECT * FROM TABLE WHERE 
TO_DATE('01-01-2014', 'DD-MM-YYYY') 
 BETWEEN 
 TRUNC(field1) AND TRUNC(field2);

Вышеуказанный запрос предполагает, что ваше поле1 и поле2 принадлежат типу данных DATE.

Incase, field1 и field2 являются строками, тогда ваш выбранный запрос должен быть

SELECT * FROM TABLE WHERE 
TO_DATE('01-01-2014', 'DD-MM-YYYY') 
 BETWEEN 
 TO_DATE(field1,'DD-MM-YYYY') AND TO_DATE(field2,'DD-MM-YYYY');

РЕДАКТИРОВАТЬ:

В oracle && недействительно, используйте AND вместо этого. Для сравнения даты как строки вы используете "YYYY-MM-DD", который был бы действительным, однако лучше использовать функцию TO_DATE поскольку я предполагаю, что data_expiracio будет типом данных DATE.

SELECT grups.nom as grup, categoria.nom as categoria, zona.nombre as zona, ofertes.* FROM (((ofertes LEFT JOIN grups ON ofertes.id_grupo = grups.id) LEFT JOIN categoria ON ofertes.idcategoria = categoria.id) LEFT JOIN zona ON ofertes.idzona = zona.id) WHERE 
estat=1 
AND
data_expiracio >= TO_DATE('2014-06-10' , 'YYYY-MM-DD')

AND TO_DATE(2014-06-04,'YYYY-MM-DD') BETWEEN 
TRUNC(dataoferta) AND TRUNC(datavenciment) ORDER BY datavenciment ASC

licensed under cc by-sa 3.0 with attribution.