SQL - 选择> =和< =的所有行

时间:2014-01-09 12:06:32

标签: mysql sql datetime select

我试图做一个sql查询,我将de compare运算符与子字符串结合起来。

在我的专栏日期中,我的内容如下: 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'

6 个答案:

答案 0 :(得分:1)

BETWEEN运算符将起作用,如下所示:

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

工作演示:http://sqlfiddle.com/#!2/b4d7e

答案 1 :(得分:1)

您可以使用BETWEEN运算符

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

编辑:我仍然离开这里,但它不是一个防错解决方案(正如评论中的oerkelens所指出的那样)

答案 2 :(得分: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';

答案 3 :(得分:1)

使用以下语法使您的查询可以进行搜索。它允许查询使用日期列中定义的任何索引。了解更多信息SARGable Queries with Datetime Datatype

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

答案 4 :(得分:0)

您要将表格行中的日期转换为字符串,然后再与书挡日期进行比较。你需要做相反的事情。将书挡日期从字符串转换为日期,然后比较每个测试日期。

某种形式的CONVERT或CAST功能应该为您做到这一点。

您的方法不起作用的原因是当SQL Server比较字符串时,它使用字母顺序。您需要升序日期顺序,这是一个不同的顺序。

答案 5 :(得分:0)

您使用的是哪个数据库?甲骨文:

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')

或者您只是将其转换为数字/整数,如YYYYMMDD,然后&gt; = =&lt;运营商也会工作。