【问题标题】:Why that query return always 1 any time?为什么该查询始终返回 1?
【发布时间】:2017-11-22 15:38:39
【问题描述】:

为什么查询总是返回 1?

SELECT DATE_FORMAT(curdate(),'%Y/%m/%d 00:30:00') >= '2017-11-22 16:00:00' <= DATE_FORMAT(curdate(),'%Y/%m/%d 15:00:00')

我在 ON DUPLICATE KEY UPDATE 中有那个查询

$query = $pdo->prepare("INSERT INTO daprenotare (prodotto, quantita, terminale, data)
VALUES (:prodotto, :quantita, :terminale, NOW())
ON DUPLICATE KEY UPDATE
data = IF((quantita = :quantita AND terminale = :terminale) AND (IF((DATE_FORMAT(curdate(),'%Y/%m/%d 00:30') >= data <= DATE_FORMAT(curdate(),'%Y/%m/%d 15:00')) = 1, 'TRUE', 'FALSE')  AND CURTIME() >= '15'), '$data', data)

我想做一些事情:

  • 如果数据(db 中的值)等于今天,则时间在 00:30 到 15:00 之间,并且 CURTIME 晚于 15:更新日期
  • 如果数据(db 中的值)等于今天,则时间在 15:00 到 00:30 之间,并且 CURTIME 晚于 00:30:更新日期

【问题讨论】:

    标签: mysql date time


    【解决方案1】:

    您为什么使用date_format()curdate()?为什么要将日期转换为字符串以与日期进行比较?已经是约会了!

    怎么样:

    select date_add(curdate(), interval 30 minute) >= '2017-11-22 16:00:00' and
           '2017-11-22 16:00:00' <= date_add(curdate(), interval 15 hour)
    

    【讨论】:

    • 每次返回0
    • @stacks 你做错了什么。查看演示here
    • 该查询每次返回 0
    【解决方案2】:

    因为您没有 AND 运算符,所以您也使用 /- 来分隔日期。

    SELECT '2017/11/22 00:10:00' >= DATE_FORMAT(curdate(),'%Y/%m/%d 00:30:00') 
       AND '2017/11/22 00:10:00' <= DATE_FORMAT(curdate(),'%Y/%m/%d 15:00:00') as t1, 
           '2017/11/22 15:00:00' >= DATE_FORMAT(curdate(),'%Y/%m/%d 00:30:00') 
       AND '2017/11/22 15:00:00' <= DATE_FORMAT(curdate(),'%Y/%m/%d 15:00:00') as t2;
    

    您可以使用BETWEEN,因此不必重复

    SQL DEMO

    SELECT '2017/11/22 00:10:00' BETWEEN DATE_FORMAT(curdate(),'%Y/%m/%d 00:30:00')
                                     AND DATE_FORMAT(curdate(),'%Y/%m/%d 15:00:00') as t1,
           '2017/11/22 15:00:00' BETWEEN DATE_FORMAT(curdate(),'%Y/%m/%d 00:30:00')
                                     AND DATE_FORMAT(curdate(),'%Y/%m/%d 15:00:00') as t2;
    

    输出

    【讨论】:

    • 第一次返回每次1,第二次每次返回0
    • 检查编辑。你正在使用 /- 使用相同的
    • 我需要从 TIME(data) 中提取 '2017/11/22 16:00:00' 所以我有 2017-11-22
    • 检查包含演示
    • 问题是你提出了两个不同的问题。我们只回答我们看到的第一个:(。对于第二个,您应该提供示例数据和预期的输出。但是条件的语法应该是相同的
    猜你喜欢
    • 2015-04-08
    • 1970-01-01
    • 1970-01-01
    • 2016-12-17
    • 1970-01-01
    • 1970-01-01
    • 2023-04-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多