关于php:比较SQL请求中的两个日期

Comparing two dates in a SQL request

我是PHP和Javascript的初学者,所以我很难在SELECT请求中比较两个日期,如下所示:

1
2
3
4
5
6
7
8
9
10
11
<?php
require 'db.php';
$sql ="SELECT * FROM shortcode WHERE invalid_from_shortcode < Date()";
$result = pg_query($sql);

if (!$result) {
    echo"Problem with query" . $query ."<br/>";
    echo pg_last_error();
    exit();
}
?>

我正在尝试仅选择[invalid_from_shortcode]列低于当前日期的"短代码"。
我不知道如何获得当前日期以及结构是否正确。


1
2
3
4
5
6
7
8
9
10
<?php
  require 'db.php';
  $sql ="SELECT * FROM shortcode WHERE invalid_from_shortcode < NOW()";
    $result = pg_query($sql);
    if (!$result) {
        echo"Problem with query" . $query ."<br/>";
        echo pg_last_error();
        exit();
    }
 ?>

Date()是一个php函数。在Mysql / PostgreSQL中你必须使用NOW()


1
2
3
...
$sql ="SELECT * FROM shortcode WHERE invalid_from_shortcode < Date()";
...

在SQL字符串中看不到像Date()这样的PHP函数。传递一个值或使用等效的Postgres函数,如@ pr1nc3已经建议的那样。

但是,虽然您没有透露invalid_from_shortcode的实际数据类型,但不清楚NOW()是否可以作为等效函数。它返回当前timestamp with time zone,它与当前日期有意义地不同 - 根据当前timezone设置,实际上等效于截断到00:00的当前timestamptz。您可能需要CURRENT_DATE(与now()::date相同)。有关:

  • 仅选择今天(从午夜开始)时间戳

旁白:与其他两个答案不同,Postgres中没有 CURDATE() 。这可能会让MySQL与Postgres混淆。


你应该使用NOW()函数而不是date(),你需要以合适的格式转换日期输入链接描述在这里你可以访问此链接转换日期格式


使用

1
NOW()      Returns the current date and time


可能你正在寻找CURDATE()。

1
 $sql ="SELECT * FROM shortcode WHERE DATE(invalid_from_shortcode) < CURDATE()";


你想使用NOW()而不是DATE()。