php - MySQL:在查询中使用特殊的正则表达式规则修复时间格式

标签 php mysql

我有一个关于 MySQL 中时间字段的奇怪问题。

在数据库中我们有 2 个字段:datetime。数据如下所示:

+-----------------------+
|   date   |    time    |
+-----------------------+
|27/04/2017|    11:30   |
+-----------------------+
|01/05/2017|    20u     |
+-----------------------+
|02/05/2017|    20u30   |
+-----------------------+
|03/05/2017|    21h     |
+-----------------------+

这个数据是什么意思?嗯:

  • 20u 是 20:00
  • 20u30 是 20:30
  • 21h 是 21:00

主要问题是由于某些原因我必须保持所有这些数据不变,并且必须找到正确显示数据的解决方案,并从中获取 unix 时间戳或正确的日期或匹配正确的日期。

为了让您了解我需要什么,Query what used 的一些旧部分如下所示:

UNIX_TIMESTAMP(CONCAT(DATE_FORMAT(STR_TO_DATE(`date`,'%d/%m/%Y'),'%Y-%m-%d'),' ',`time`))

但是在匹配正常情况下失败了。

我编写了一个 PHP 函数用于在代码的某些部分显示正确的时间,如下所示:

function bo_time($string)
{   
    if(preg_match("/(\d{1,2})(u|h)/Ui",$string, $match))
    {
        $string = sprintf("%s:%s", sprintf('%02d', $match[1]), '00' );
    }
    else if(preg_match("/(\d{1,2})(u|h|\:)(\d{2})/Ui",$string, $match))
    {
        $string = sprintf("%s:%s", sprintf('%02d', $match[1]), ( isset($match[3]) ? sprintf('%02d', $match[3]) : '00' ));
    }

    return $string;
}

使用该 PHP 函数,系统的某些部分可以正常工作,但在系统的某些部分,我可以按日期/时间在表之间进行匹配,但一切都会失败并崩溃。

我的主要问题是:

有没有办法像我在 PHP 中那样编写一些正则表达式来转换 MySQL 查询中的时间?

谢谢!

最佳答案

我创建了一个似乎有效的查询,至少对于您提供给我们的数据而言。它只需要一些逻辑来处理数据的各种边缘情况。我将您的时间数据转换为实际的时间戳时间字符串,然后与日期连接,也转换为 ISO 格式。有了正确的日期和时间,我们就可以调用 UNIX_TIMESTAMP 在此时间戳字符串上获取所需的数据。

SELECT
    date, time, UNIX_TIMESTAMP(CONCAT(date, ' ', time)) AS ts
FROM
(
    SELECT
        CONCAT(RIGHT(date, 4), '-', SUBSTRING(date, 4, 2), '-',
               LEFT(date, 2)) AS date,
        CASE WHEN time REGEXP '.*[uh]$'
             THEN CONCAT(LEFT(time, CHAR_LENGTH(time) - 1), ':00:00')
             ELSE CONCAT(REPLACE(REPLACE(time, 'h', ':'),
                         'u', ':'), ':00') END AS time
    FROM yourTable
) t;

输出:

enter image description here

此处演示:

Rextester

关于php - MySQL:在查询中使用特殊的正则表达式规则修复时间格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47119972/

相关文章:

php - PHP的rand函数真的有那么差吗?

mysql - 如果不返回最低值

php - 更改 php/mysql 数据库会创建不安全的连接吗?

php - XMLHttpRequest 中的 UTF-8 字符已损坏

php - 向 php 脚本提交同名表单?

mysql - 导轨 : Querying with an Array

c++ - mysql c++ 连接器 : How to check for and recover from failed connection without crashing

php - CakePHP 将新模型关联添加到现有表

php - 如何在 PHP 类方法中将 db 对象传递给 mysqli_query

php - 如何在mysql中将二进制转换为整数?