【问题标题】:Compare date from php and MSSQL to retrieve the nearest date from now比较来自 php 和 MSSQL 的日期以检索距现在最近的日期
【发布时间】:2013-01-23 15:50:21
【问题描述】:

我想一起比较 MMSQL 日期,我想从现在开始检索最近的日期。

这是我的 mssql 日期数据示例:2013-01-23 09:34:03.000

我的桌子是这样的:

NAME : myTable
 Column:
 - nameUpdate (VARCHAR(255))
  - date (DATETIME)

这是我到目前为止所做的,但它不起作用。

$query = "SELECT date FROM myTable";
$res_mnem = mssql_query($query) or die(mssql_get_last_message() . "[ " . $query . " ]");  
        $latestDate = "";    
        if (!mssql_num_rows($query)) {

             while ($row = mssql_fetch_array($res_mnem)) {
                if($latestDate == ""){
                  $latestDate = $row["date"];
                }
                elseif($row["date"] > $latestDate){
                   $latestDate = $row["date"];
        }
            }

      }
    echo $latestDate;

谢谢大家

【问题讨论】:

  • 事实上这个查询会很有趣,乍一看你可以把你的日期逻辑放到查询本身中,而不是在你的 PHP 代码中。
  • 我已经尝试过 MAX(date) 的事情......但它是来自 myTable 的 SELECT 日期
  • 那么使用子查询?请发布表架构。
  • @njk : 架构太简单了.. 我把它写在我的问题中

标签: php sql-server date datediff


【解决方案1】:
SELECT TOP 1 DATEDIFF(s, [date], GetDate())
FROM myTable
ORDER BY DATEDIFF(s, [date], GetDate())

这会在表中的 Current (GETDATE()) 和 [date] 之间以秒为单位进行日期减法(如果需要,您可以以低于秒的粒度执行此操作)。它按相同的 datediff 以升序排列。前 1 只选择第一条记录——即由于 ORDER BY 而最接近当前日期的记录。

【讨论】:

  • 如果将来可能有 [date](不知道您在跟踪什么,可能是未来计划的项目等),只需将 datediff 包装在 ABS() 函数中即可获取未来或过去的最近日期。
  • 因此您可以修改您的 php 以执行此查询并检索第一(也是唯一)行,而不必遍历所有行。
  • 查询给你null,还是php检索?
  • 可能会溢出秒数。尝试更改两个地方的 datediff 使用分钟:DATEDIFF(minute, [date], GetDate())。如果可以解决问题,请告诉我,如果需要,我可以建议如何获得比一分钟更细的东西。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-17
  • 1970-01-01
  • 2016-08-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多