【问题标题】:SQL - Time since dateSQL - 自日期以来的时间
【发布时间】:2016-04-02 20:40:42
【问题描述】:

我正在为一件事而苦苦挣扎。我正在尝试使用 SQL 计算某个日期是多少天前。我的数据库中的日期可以有两种格式:

Aug 28 2014, 17:17:34 CEST
Dec 29 2015, 01:03:14 CET

这是不同日期的两个示例。注意“CET”和“CEST”。

但无论如何,我将如何在 SQL 查询中继续计算呢?我设法在 PHP 中做到这一点,但我想在 SQL 查询本身中做到这一点(如果可能的话)。因为它会节省大量的内存使用。我尽量让我的工作尽可能快。我只想访问仅在过去 2-3 天左右登录的用户的数据。当然,我可以创建一个SELECT * FROM users,然后运行 ​​PHP 来检查日期。但是有没有办法在 SQL 中做到这一点?点赞:SELECT * FROM users WHERE [lastlogin < 2 days]

这是我当前的 PHP 代码。我真的很想在 SQL 中做到这一点。顺便说一句,我的专栏目前是文本。由于某种原因,日期时间不适用于该格式。

$lastlogin = $row['lastlogin'];
$lastlogin = str_replace("\xc2\xa0",' ',$lastlogin);

$Date = $lastlogin;
$Date = substr($Date, 0, strpos($Date, " CE"));
$now  = date('Y-m-d');
$datetime1 = new DateTime($Date);
$datetime2 = new DateTime($now);
$interval = $datetime1->diff($datetime2);
$difference = $interval->format('%a days ago');

echo "Last login was: " . $difference;

【问题讨论】:

标签: php mysql sql date datetime


【解决方案1】:

您可以使用 to_days() 或 datediff() 函数
http://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html

【讨论】:

    【解决方案2】:

    你应该改变你的表来清理数据。将数据转换为两列,其中一列中的时区信息和另一列中的日期和时间。 您可以使用 SUBSTRING_INDEX() 轻松拆分数据,同时将字符串转换为日期时间。

    像这样拆分“CET”和“CEST”的“C”:

    SELECT SUBSTRING_INDEX("Aug 28 2014, 17:17:34 CEST","C",1)
    

    你会看到你只剩下日期和时间部分,尽管仍然是字符串格式。这可以通过 STR_TO_DATE 进行更改,您可以同时进行这两项操作。

    首先添加新列来存储数据:

    ALTER yourtablename ADD newdatecolumn DATETIME AFTER oldcolumnname;
    ALTER yourtablename ADD newtimezonecolumn VARCHAR(4) AFTER newdatecolumn;
    
    UPDATE yourtablename
    SET newdatecolumn = 
    STR_TO_DATE(SUBSTRING_INDEX(olddatecolumn,"C",1), '%b %d %Y, %T')
    

    然后您可以再次使用 SUBSTRING_INEX,这次拆分列中的最后一个空格并为另一个新列获取时区

    UPDATE yourtablename
    SET newtimezonecolumn = SUBSTRING_INDEX(olddatecolumn," ",-1)
    

    那么您将拥有可以更轻松地使用建议的 DATEDIFF() 或其他时间和日期函数的数据。如果需要,您可以删除旧日期列。

    请注意,您的表名等应更改为实际的表名和列名。

    【讨论】:

    • 非常感谢!但是我怎样才能将所有这些查询合二为一呢?我需要在我的 PHP 脚本中执行它们,而不是在数据库中。因为我的数据库一直在更新,并且有新的条目。因此,每次运行脚本时,我都需要运行所有这些查询。我可以复制所有这些并用分号分隔它们吗?或者那会有什么问题?
    • 在下面查看我的答案,了解我的查询现在的样子
    猜你喜欢
    • 2018-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-27
    • 1970-01-01
    • 1970-01-01
    • 2016-04-04
    相关资源
    最近更新 更多