我试图做一个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'
答案 0 :(得分:1)
BETWEEN
运算符将起作用,如下所示:
SELECT *
From table
Where Name= 'Something'
AND `date` BETWEEN '2014-01-09' AND '2014-01-23'
答案 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;运营商也会工作。