【问题标题】:Why does mysql ceil datetime strings?为什么mysql ceil日期时间字符串?
【发布时间】:2015-12-02 21:13:31
【问题描述】:

我在使用字符串搜索日期时间列时遇到问题。

我正在使用 codeigniters insert_batch,但我确信如果我使用 insert,它是一样的。这是我插入的数据示例:

$valor_log_proceso = array(
        'id_interno' => 21656,
        'proceso_id' => 1,
        'fecha_inicio' => '2015-12-02T09:04:59.884',
        'fecha_fin' => '2015-12-02T09:20:10.884',
        'equipo' => "EQUIPOPC",
        'usuario_id' => 2,
        'log_envio_id' => 10
    );

在 mysql db 'fecha_inicio' 和 'fecha_fin' 中是 datetime colmuns。 每个 $valor_log_proceso 数组中的 'fecha_inicio' 和 'fecha_fin' 值都是从请求中检索到的字符串。

当我尝试使用 get_where 查找该数据时

$valor_log_proceso = array(
        'id_interno' => 21656,
        'proceso_id' => 1,
        'fecha_inicio' => '2015-12-02T09:04:59.884',
        'fecha_fin' => '2015-12-02T09:20:10.884',
        'equipo' => "EQUIPOPC",
        'usuario_id' => 2
    );
$result = $this->db->get_where($table_name, $valor_log_proceso)->result_array();

$result 是一个空数组。

然后我检查数据库并查看截断/上限的日期:

fecha_inicio: 2015-12-02 09:05:00
fecha_fin: 2015-12-02 09:20:11

所以问题是为什么会发生这种情况? 如何正确搜索表中的行?

【问题讨论】:

  • 列类型设置为什么?整数,varchar?
  • mysql中列的类型就是datetime
  • 我从未见过日期时间列包含这样的值

标签: php mysql codeigniter datetime


【解决方案1】:

发生这种情况的原因是 DATETIME 列只能包含这种数据模式。如您所见,它也去掉了“T”。

https://dev.mysql.com/doc/refman/5.6/en/datetime.html

The DATETIME type is used for values that contain both date and time parts. MySQL retrieves and displays DATETIME values in 'YYYY-MM-DD HH:MM:SS' format. The supported range is '1000-01-01 00:00:00' to '9999-12-31 23:59:59'

为了正确创建查询,您必须更改数组以匹配相同的模式...

    'fecha_inicio' => '2015-12-02 09:04:59',
    'fecha_fin'    => '2015-12-02 09:20:10',

添加

这是一个将当前格式操作为所需格式的函数

function format($x){
    $x = preg_replace('/[T]/', ' ', $x);
    $y = explode(".", $x);
    return $y[0];
}

$x = format('2015-12-02T09:04:59.884');

echo $x;  // Prints 2015-12-02 09:04:59

【讨论】:

  • 他的问题的解决方案?也许存储在 var char 字段中并在选择时转换为 date_format?
  • 我明白了,谢谢,您知道如何将string '2015-12-02T09:04:59.884' 正确转换为将插入数据库的日期时间值吗?
  • 我认为您可以使用 DATE_FORMAT 但请查看dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html上的功能
  • 看到毫秒可能无法为日期提供价值,我想我将不得不操作日期字符串,即在插入它们之前截断毫秒。
  • @Jedabero 添加了将当前格式转换为所需格式的功能
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-02-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多