【问题标题】:How to compare Timestamp in where clause如何比较where子句中的时间戳
【发布时间】:2013-09-20 13:20:03
【问题描述】:

我有一个带有时间戳列的表,如果该月为 31 天,我想获取特定月份的时间戳(例如 9 月 1 日到 9 月 30 日之间的时间戳)的值。 我使用这个查询:

SELECT users.username, users.id, count(tahminler.tahmin)as tahmins_no FROM users LEFT JOIN tahminler ON users.id = tahminler.user_id  GROUP BY users.id having count(tahminler.tahmin) > 0

我可以加where timestamp IN(dates_array)吗??

date_array 将是整个月的日期??

【问题讨论】:

标签: mysql sql timestamp where-clause


【解决方案1】:
SELECT users.username, users.id, count(tahminler.tahmin)as tahmins_no 来自用户 LEFT JOIN tahminler ON users.id = tahminler.user_id 其中年份(时间戳)= 2013 和月份(时间戳)= 9 GROUP BY users.id 计数(tahminler.tahmin)> 0

要使其与索引一起使用,您可以这样做

SELECT users.username, users.id, count(tahminler.tahmin)as tahmins_no 
FROM users 
LEFT JOIN tahminler ON users.id = tahminler.user_id  
where timestamp >= '2013-09-01' and timestamp < '2013-10-01'
GROUP BY users.id 
having count(tahminler.tahmin) > 0

【讨论】:

  • +1 实际上并不清楚它应该只是 2013 年,但似乎最有可能。
  • 它给了我一个错误:令牌不匹配
  • @BaselShbeb:这听起来不像是 MySQL 错误消息。也许您的错误在其他地方。
  • @BaselShbeb:我添加了一个额外的信息。
【解决方案2】:

如果是TIMESTAMP

YEAR (TIMESTAMP) = 2013 AND MONTH (TIMESTAMP) = 9

包含在同一个子句中

DATE_FORMAT(TIMESTAMP,'%Y-%m')='2013-09'

对于unix时间戳

YEAR (FROM_UNIXTIME(TIMESTAMP)) = 2013 AND MONTH(FROM_UNIXTIME(TIMESTAMP))=9

包含在同一个子句中

DATE_FORMAT(FROM_UNIXTIME(TIMESTAMP),'%Y-%m')='2013-09'

【讨论】:

    【解决方案3】:

    如果我正确理解您的问题,您可以添加:

    WHERE MONTH(timestamp)=9
    

    【讨论】:

    • 它给了我错误:令牌不匹配
    • GROUP BY 子句之前有吗?
    猜你喜欢
    • 1970-01-01
    • 2021-02-09
    • 1970-01-01
    • 1970-01-01
    • 2016-11-02
    • 1970-01-01
    • 2015-06-26
    • 2022-01-09
    • 2020-04-23
    相关资源
    最近更新 更多