【问题标题】:SQL Query On Date When Type Is VARCHAR类型为 VARCHAR 时的 SQL 查询日期
【发布时间】:2014-02-13 06:07:06
【问题描述】:

我正在尝试查询具有 2 个日期之间的数据库...问题是我正在查询的列包含当前格式如下“01/01/2014”(dd/mm/yyyy)的日期列类型为 VARCHAR。

目前,我无法将该列转换为日期类型。

基本上,当我查询表时,因为它没有设置为日期类型,所以之间的查询不会返回正确的行...

有没有其他人遇到过这个问题,我可以在查询中更改什么吗?

$this->db->where('IssueDate >=', '02/12/2013');
$this->db->where('IssueDate <=', '22/01/2014');
$query = $this->db->get('MYTABLE');

谢谢大家。

【问题讨论】:

  • 将值转换为查询中的日期。
  • 谁能帮我解决这个问题?

标签: php mysql sql codeigniter


【解决方案1】:

解决方法是使用str_to_date():

$this->db->where("str_to_date(IssueDate, '%d/%m/%Y') >=", "'2013-12-92'");
$this->db->where("str_to_date(IssueDate, '%d/%m/%Y') <=", "'2014-01-22'");
$

您可能无法控制数据库。但是您确实可以控制自己的常量。对于此类常量,您应该习惯 ISO 标准 YYYY-MM-DD —— 明确且被大多数数据库正确接受。

【讨论】:

  • Gordan,谢谢你...我试过了,但由于某种原因我什么也没得到...这就是我所拥有的: str_to_date(IssueDate, '%d/%m/%Y') >=', '02/12/2013');
  • @WebDevB 。 . .我不知道您的数据库是否会将您的字符串解释为有效日期。只需使用'2013-12-02'
  • @WebDevB 用户用双引号表示where("") 方法,用单引号表示SQL 查询(在str_to_date() 函数内)。
  • 喜欢这个@HashemQolami $this->db->where("str_to_date(IssueDate, '%d/%m/%Y') >=', '2013-12-02'") ;
  • @WebDevB 。 . .你看过修改后的代码吗?在应用层对字符串使用双引号。
【解决方案2】:

我可能建议在数据库中的表上创建一个视图,将您拥有的字符串日期列转换为以下格式... YYYYMMDD

这种格式是可排序的,并且可以很容易地与其他类似的格式化日期进行比较 - 你甚至可以用它进行日期运算。

请记住,视图不会复制表或增加任何性能开销。即使最初您不需要对基础表执行任何操作,通过视图访问任何表通常也是一个好主意 - 如果您以后发现确实需要执行这些操作,这将有所帮助。

【讨论】:

    【解决方案3】:

    BETWEEN 子句与 STR_TO_DATE() 一起使用。检查以下代码:-

    $wh = STR_TO_DATE(`IssueDate`,'%d/%m/%Y')." between '02/12/2013' and '22/01/2014'";
    $this->db->where($wh);
    

    期待它会给你完美的结果。

    【讨论】:

    • 这似乎也不起作用......我错过了什么??
    • @WebDevB 你有什么错误吗?您可以为您提供带有记录的表模式吗?那么我可以为您提供准确的解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-28
    • 1970-01-01
    • 2023-02-08
    • 1970-01-01
    相关资源
    最近更新 更多