我在使用字符串搜索日期时间列时遇到问题。
我正在使用 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 数据库中,'fecha_inicio' 和 'fecha_fin' 是 datetime
列。
每个 $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
所以问题是为什么会发生这种情况? 如何正确搜索表中的行?
最佳答案
发生这种情况的原因是 DATETIME 列只能具有这种数据模式。正如您所看到的,它也删除了“T”。
参见 https://dev.mysql.com/doc/refman/5.6/en/datetime.html
DATETIME 类型用于包含日期和时间部分的值。 MySQL 以“YYYY-MM-DD HH:MM:SS”格式检索并显示 DATETIME 值。支持的范围是“1000-01-01 00:00:00”到“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
关于php - 为什么 mysql ceil 日期时间字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34053103/