将包含 DATEDIFF 和 LIKE 的原始 SQL 转换为 CodeIgniter 活动记录语法

问题描述 投票:0回答:2
SELECT 
    case_id,
    serialnumber,
    DateLastHere,
    Bookedindate,
    DATEDIFF(DateLastHere,Bookedindate) 
FROM `cases` 
WHERE serialnumber like 'TTTT46'
php mysql codeigniter activerecord query-builder
2个回答
3
投票

你可以这样做

$data   =   array(
            'case_id',
            'serialnumber',
            'DateLastHere',
            'Bookedindate',
            'DATEDIFF(DateLastHere,Bookedindate)'
            );
$this->db->select($data);
$this->db->from('cases');
$this->db->like('serialnumber','TTTT46');
$query = $this->db->get()->result_array();

0
投票
  • 如果您想在 LIKE 搜索值的两侧使用通配符:

    SELECT `case_id`, `serialnumber`, `DateLastHere`, `Bookedindate`, DATEDIFF(DateLastHere,Bookedindate)
    FROM `cases`
    WHERE `serialnumber` LIKE '%TTTT46%' ESCAPE '!'
    

    代码点火器:

    $this->db
        ->select([
            'case_id',
            'serialnumber',
            'DateLastHere',
            'Bookedindate',
            'DATEDIFF(DateLastHere,Bookedindate)'
        ])
        ->like('serialnumber','TTTT46')
        ->get('cases')
    


  • 如果您不想在 LIKE 搜索值上使用任何通配符:

    SELECT `case_id`, `serialnumber`, `DateLastHere`, `Bookedindate`, DATEDIFF(DateLastHere,Bookedindate)
    FROM `cases`
    WHERE `serialnumber` LIKE 'TTTT46' ESCAPE '!'
    

    代码点火器:

    $this->db
        ->select([
            'case_id',
            'serialnumber',
            'DateLastHere',
            'Bookedindate',
            'DATEDIFF(DateLastHere,Bookedindate)'
        ])
        ->like('serialnumber','TTTT46')
        ->get('cases');
    


  • 如果你想匹配整个字符串,那么 LIKE 没有帮助:

    SELECT `case_id`, `serialnumber`, `DateLastHere`, `Bookedindate`, DATEDIFF(DateLastHere,Bookedindate)
    FROM `cases`
    WHERE `serialnumber` = 'TTTT46'
    

    代码点火器:

    $this->db
        ->select([
            'case_id',
            'serialnumber',
            'DateLastHere',
            'Bookedindate',
            'DATEDIFF(DateLastHere,Bookedindate)'
        ])
        ->get_where('cases', ['serialnumber' => 'TTTT46']);
    


  • 如果您想显式地将 DATEDIFF 列括在标识符引号中,请使用

    escape_identifiers()
    :

    SELECT `case_id`, `serialnumber`, `DateLastHere`, `Bookedindate`, DATEDIFF(`DateLastHere`,`Bookedindate`)
    FROM `cases`
    WHERE `serialnumber` = 'TTTT46'
    

    代码点火器:

    $this->db
        ->select([
            'case_id',
            'serialnumber',
            'DateLastHere',
            'Bookedindate',
            sprintf(
                'DATEDIFF(%s,%s)',
                $this->db->escape_identifiers('DateLastHere'),
                $this->db->escape_identifiers('Bookedindate')
            )
        ])
        ->get_where('cases', ['serialnumber' => 'TTTT46']);
    
© www.soinside.com 2019 - 2024. All rights reserved.