我制作了一个程序并注意到2018年排序不正确。我修复它所以它会首先显示2018但它仍然有一个问题正确排序现在它显示示例1/02/2018然后1/03/218等等,但我需要它显示1/03/2018然后1 / 2/20188然后2017年全部。这是我的模型的部分代码,如果需要更多代码我将添加它。
Model.php
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class visitor_log_model extends CI_Model {
var $table = 'visitor_log_list';
var $column = array('date','name','vendor','department','contact_person','expected_arrival_time'); //set column field database for order and search
var $order = array('id' => 'desc'); // default order
public function __construct()
{
parent::__construct();
$this->load->database();
}
//gets the gets all the records from the database
private function _get_datatables_query()
{
$this->db->from($this->table);
$this->db->order_by("date", "asc");
$this->db->order_by("expected_arrival_time", "asc");
$i = 0;
foreach ($this->column as $item) // loop column
{
if($_POST['search']['value']) // if datatable send POST for search
{
if($i===0) // first loop
{
$this->db->group_start(); // open bracket. query Where with OR clause better with bracket. because maybe can combine with other WHERE with AND.
$this->db->like($item, $_POST['search']['value']);
}
else
{
$this->db->or_like($item, $_POST['search']['value']);
}
if(count($this->column) - 1 == $i) //last loop
$this->db->group_end(); //close bracket
}
$column[$i] = $item; // set column array variable to order processing
$i++;
}
答案 0 :(得分:3)
将日期存储为字符串是一个非常糟糕的主意!笨拙,缓慢和错误...
对于SQL Server的引擎,字符串是一个字符串。您可以将列命名为date
,并且可以存储看起来像日期的值,但是可以根据字母数字排序的规则对其进行排序(如在词典中)。
此外:像1/02/2018
这样的日期格式取决于文化。有些系统会将其作为2月的第一个,其他系统将作为1月的第二个。这可能对您完全有效并通过所有内部测试,但会在客户的机器上发生故障。
DATETIME2
或DATE
与现代SQL-Server一起使用!ISO8601
,在大多数情况下YYYY-MM-ddTHH:mm:ss
(提防中间的T
。)