寻找某些unix时间戳之间的mysql行

时间:2016-07-14 17:32:31

标签: mysql unix

我正在尝试编写一个mysql查询,它将一个unix时间戳转换为%Y%m%d格式然后查找某个日期范围之间的行。查询有效,直到我们获得WHERE子句。我不知道为什么它不起作用。我希望这里有一些sql guru可以帮助我。

谢谢,

克里斯

SELECT 
            date_format(from_unixtime('timestamp'),'%Y%m%d') AS 'datecreated'
            ,`order_id`
            , `email`
            , `subtotal`
            , `shipping_cost`
            , `total`
            , `status`
        FROM
            `orders`
        WHERE 'datecreated' >= '20160501' AND 'datecreated' < '20160512'

3 个答案:

答案 0 :(得分:2)

CANT 使用where

上的别名

要么再次编写date_format函数

SELECT 
        date_format(from_unixtime('timestamp'),'%Y%m%d') AS `datecreated`
        ,`order_id`
        , `email`
        , `subtotal`
        , `shipping_cost`
        , `total`
        , `status`
    FROM
        `orders`
    WHERE date_format(from_unixtime('timestamp'),'%Y%m%d') >= '20160501' 
     AND  date_format(from_unixtime('timestamp'),'%Y%m%d') < '20160512'

或创建子查询

SELECT *
FROM (
    SELECT 
        date_format(from_unixtime('timestamp'),'%Y%m%d') AS `datecreated`
        ,`order_id`
        , `email`
        , `subtotal`
        , `shipping_cost`
        , `total`
        , `status`
    FROM
        `orders`
     ) T
 WHERE `datecreated` >= '20160501' AND 'datecreated' < '20160512'

修改

也是fieldname使用厚背而不是单引号

  `datecreated` field name
  'datecreated' string constant

答案 1 :(得分:1)

  

我正在尝试编写一个mysql查询,它将一个unix时间戳转换为%Y%m%d格式然后查找某个日期范围之间的行。

您可能正在考虑倒退问题。首先通过WHERE找到正确的行,然后担心格式化/转换结果集中的数据:

SELECT date_format(from_unixtime('timestamp'),'%Y%m%d') AS "datecreated",
       ... other fields ...
  FROM "orders"
 WHERE "timestamp" >= UNIX_TIMESTAMP('2016-05-01 00:00:00')
       AND
       "timestamp" <  UNIX_TIMESTAMP('2016-05-12 00:00:00')

作为奖励,上述内容可以使用"timestamp"上的索引。

除了

在默认模式下,MySQL允许多种引用样式并允许字符串为"double quoted"'single quoted',即使前者是引用标识符的ANSI SQL标准(比如列名。)

虽然这是一种方便,但我认为在这种情况下它比它的价值更麻烦。在您编写'col' > 'yyyymmdd'的位置,您将一个字符串与另一个字符串进行比较,而不是您要比较的计算列。 (正如评论中所提到的那样,也会失败,但你的查询却没有那么远。)

您可能希望熟悉MySQL的ANSI mode,这消除了很多这种歧义。如果你搬到除MySQL以外的RDBMS,你会很感激。

答案 2 :(得分:0)

更改日期格式

SELECT 
            date_format(from_unixtime('timestamp'),'%Y%m%d') AS 'datecreated'
            ,`order_id`
            , `email`
            , `subtotal`
            , `shipping_cost`
            , `total`
            , `status`
        FROM
            `orders`
        WHERE from_unixtime('timestamp') between '2016-05-01' AND '2016-0512'