查询日期范围内也具有指定子字符串的行

时间:2015-05-06 15:50:09

标签: mysql sql date wildcard

我试图查询MySQL数据库并返回给定日期范围内的所有记录,并且还包含子字符串' bank'在内容列中。

' time'的格式我引用的字段是mm/dd/yyyy hh:mm:ss

以下是我提出的陈述,但MySQL Workbench给了我一些问题:

SELECT * 
FROM blogs 
WHERE ((‘time’ BETWEEN “04/01/2011 00:00:00” AND “04/15/2011 23:59:59”) 
   AND (‘content’ LIKE ‘%bank%’))

2 个答案:

答案 0 :(得分:2)

尝试这个怎么样:

SELECT * 
    FROM blogs 
    WHERE `time` BETWEEN '2011-04-01 00:00:00' AND '2011-04-15 23:59:59' 
        AND `content` LIKE '%bank%';

如果您的time字段实际上是时间戳,则此方法有效。如果time不是时间戳,那么您将不得不使用 McAdam331 的答案,但我希望您的数据库使用正确的类型来处理您的数据类型要求它存储。

单个' 或双" 引用值并在字段名称周围打勾。我还将日期格式更改为yyyy-mm-dd hh:mm:ss并删除了一些不必要的括号。

http://sqlfiddle.com/#!9/730bd/1/0

如果您在发布此类问题时发布了表格的结构会很有帮助,那么我们可以确保给出正确的答案。

答案 1 :(得分:1)

在MySQL中存储类似日期并不是一个好主意。 DBMS具有Date and Time Types,您可以使用它来存储该信息。

如果不能更改数据库,则可以使用STR_TO_DATE函数将字符串转换为日期对象,该函数接收日期字符串及其已存在的格式并返回日期。

MySQL以“YYYY-MM-DD”格式存储日期,因此要获得该格式,您可以尝试以下内容:

SELECT STR_TO_DATE('04/01/2011', '%m/%d/%Y');

将返回该日期的日期对象。 注意大写字母Y。

然后在日期之间查询会变得更加容易,例如:

SELECT *
FROM myTable
WHERE STR_TO_DATE(dateString, '%m/%d/%Y %H:%i:%s') BETWEEN STR_TO_DATE('04/01/2011 00:00:00', '%m/%d/%Y %H:%i:%s') AND STR_TO_DATE('04/15/2011 23:59:59', '%m/%d/%Y %H:%i:%s')
      AND content LIKE '%bank%';

以下是SQL Fiddle示例,此处是link,其中包含您需要的格式字符。