我在使用字符串搜索datetime列时遇到问题。
我使用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。
' fecha_inicio'和' fecha_fin'每个$ valor_log_proceso数组中的值都是从请求中检索的字符串。
当我尝试使用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
所以问题是为什么会发生这种情况? 如何正确搜索表格中的行?
答案 0 :(得分:2)
发生这种情况的原因是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',
<强> ADDITION 强>
这是一个将当前格式操作为所需格式的功能
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