Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在MySQL中比较10位unix日期和dd/mm/yyyy日期格式?_Mysql_Sql - Fatal编程技术网

如何在MySQL中比较10位unix日期和dd/mm/yyyy日期格式?

如何在MySQL中比较10位unix日期和dd/mm/yyyy日期格式?,mysql,sql,Mysql,Sql,我想列出2008年1月1日至2008年10月31日期间的所有产品。mysql中的产品输入日期以10位格式输入。这是我尝试过的sql,但它返回表中的所有数据并忽略日期比较: SELECT productid, productname FROM products WHERE FROM_UNIXTIME(entry_date,'%d/%m/%Y') BETWEEN '01/01/2008' and '31/12/2008' 我做错了什么?两个提示: 利用MySQL的原生日期格式 将计算放在比较

我想列出2008年1月1日至2008年10月31日期间的所有产品。mysql中的产品输入日期以10位格式输入。这是我尝试过的sql,但它返回表中的所有数据并忽略日期比较:

SELECT productid, productname
  FROM products
 WHERE FROM_UNIXTIME(entry_date,'%d/%m/%Y') BETWEEN '01/01/2008' and '31/12/2008'
我做错了什么?

两个提示:

  • 利用MySQL的原生日期格式
  • 将计算放在比较的常量部分
  • 把这些放在一起,您的查询应该如下所示:

    SELECT productid, productname
      FROM products
     WHERE entry_date BETWEEN UNIX_TIMESTAMP('2008-01-01') AND UNIX_TIMESTAMP('2009-01-01')
    
    使用本机日期格式意味着您不必使用格式选项玩游戏。但在这个查询中,更大的优势在于将计算结果放入比较的常量部分。这是一个胜利,因为MySQL只需要做一次计算,而不是在它查看的每一行上。这也意味着它可以使用此字段上的索引(如果有)

    顺便说一句,我经常使用这样的查询


    (我在结束范围中使用了'2009-01-01'以避免一次过一次的错误。(Unix时间戳精确到第二次,没有时间的日期会变为午夜。因此,您最初的比较将12月31日排除在结果集中。)

    您不需要说明您的十位数输入日期是什么数据类型

    如果它是
    DATETIME
    类型,则会使它变得比需要的更难

    SELECT productid, productname
      FROM products
     WHERE entry_date >= str_to_date('01-01-2008', '%d-%m-%Y')
       AND entry_date < str_to_date('01-11-2008', '%d-%m-%Y')
    

    您查询中的日期可能未隐式转换为DATETIME数据类型谢谢。您的解决方案似乎适合我。我还有两个问题:-为什么UNIX\u时间戳('2008-01-01')中的日期不能为mm/dd/yyyy格式?-只传递日期而不传递UNIX\u时间戳('2008-01-01')中的时间可以吗?mm/dd/yyyy是以美国为中心的,不明确,有时会被误认为dd/mm/yyyy。yyyy-mm-dd是明确的,是一个国际标准,因此MySQL默认为。只将日期传递到UNIX_时间戳是可以的;如果缺少,时间默认为
    00:00
    。感谢您的澄清。这非常有用。干杯。输入日期为十位数格式,如1542415245。staticsan的解决方案似乎适合我。感谢您的回复。
    SELECT productid, productname
      FROM products
     WHERE entry_date >= '2008-01-01'
       AND entry_date < '2008-11-01'