2014-01-09 3 views
0

Я пытаюсь выполнить sql-запрос, который я совмещаю для сравнения операторов с подстрокой.SQL - выберите все строки, которые являются = = и <=

в моей колонке даты я следующее значение внутри: 09-01-2014 12:02:55

то, что я пытаюсь сейчас, чтобы выбрать все строки, которая является > = 09-01- 2014 и, например, < = 22-01-2014

как я могу это сделать?

я пытаюсь, например, с этим кодом:

SELECT * From table Where Name= 'Something' 
AND SUBSTRING(date,1,10) = '09-01-2014' 
AND SUBSTRING(date,1,10) < '22-01-2014' 
+2

Сравнение строк не будет работать для преобразованных дат. 01-01-2014 будет ниже 02-01-2013. –

+0

С помощью этого кода вы получите только записи, где 'SUBSTRING (date, 1,10) = '09 -01-2014'', который, как строка, действительно <' 22-01-2014'. Прежде всего, переосмыслите свои = и <. Во-вторых, сравните даты, а не строки. '01 -01-2999 'составляет <22-01-2014' в виде строки. – oerkelens

ответ

1

Вы можете использовать оператор BETWEEN

SELECT * FROM table 
WHERE Name = 'Something' 
AND SUBSTRING(date, 1, 10) BETWEEN '09-01-2014' AND '22-01-2014' 

EDIT: Я все еще оставить это здесь, но это не является решением доказательства ошибки (как указал oerkelens вниз в комментариях)

+2

'10 -08-2020 'удовлетворяет вашему состоянию. Я сомневаюсь, что это то, чего хочет OP. – oerkelens

+0

спасибо ver много ..его работа отлично – user2232273

+0

@oerkelens Спасибо за вход, вы абсолютно правы. –

1

Оператор BETWEEN будет работать, как это:

SELECT * 
From table 
Where Name= 'Something' 
AND `date` BETWEEN '2014-01-09' AND '2014-01-23' 

Рабочая Демо: http://sqlfiddle.com/#!2/b4d7e

1

Попробуйте это:

SELECT * 
FROM tableA a 
WHERE a.nme= 'Something' AND 
     DATE(STR_TO_DATE(a.date, '%d-%m-%Y %H:%i:%s')) >= '2014-01-09' AND 
     DATE(STR_TO_DATE(a.date, '%d-%m-%Y %H:%i:%s')) <= '2014-01-22'; 

ИЛИ

SELECT * 
FROM tableA a 
WHERE a.nme= 'Something' AND 
     DATE(STR_TO_DATE(a.date, '%d-%m-%Y %H:%i:%s')) BETWEEN '2014-01-09' AND '2014-01-22'; 
1

Использование следующего синтаксиса делает ваш запрос приемлемым. Он позволяет запрашивать любые индексы, определенные в столбце даты. для получения дополнительной информации SARGable Queries with Datetime Datatype

SELECT * From table 
Where Name= 'Something' 
AND [DateColumn] >= '20140109' 
AND [DateColumn] <= '20140122' 
0

Вы конвертируете дату из строки таблицы в строку перед сравнением с датами форзаца. Вам нужно сделать наоборот. Преобразуйте даты в буквице от строк до дат, затем сравните каждую дату теста.

Некоторые формы функции CONVERT или CAST должны сделать это за вас.

Причина, по которой ваш подход не будет работать, заключается в том, что когда SQL-сервер сравнивает строки, он использует алфавитную последовательность. Вы хотите восходящий порядок даты, который является другим порядком.

0

Какую базу данных вы используете? Oracle:

SELECT * 
    FROM table tbl 
WHERE 1=1 
    AND name = 'Something' 
    AND trim(tbl.column) >= to_date('2014-01-09','DD-MM-YYYY') 
    AND trim(tbl.column) <= to_date('2014-01-22','DD-MM-YYYY') 

или просто превратить его в число/целое число, как ГГГГММДД то> = = < операторы тоже будет работать.

Смежные вопросы