【问题标题】:MySQL - Comparsion VARCHAR with INTMySQL - 比较 VARCHAR 与 INT
【发布时间】:2013-05-20 21:53:30
【问题描述】:

在我的站点上,用户注册日期作为时间戳存储在 varchar(20) 列中。我要统计今天有多少用户注册,我写了查询:

SELECT COUNT(*) as count FROM `users` WHERE `user_group` = 7 AND `reg_date > 1368993600

1368993600 - 今天 0:00。此查询返回我所有用户的计数,而不是今天注册的计数。我编辑了查询:

SELECT COUNT(*) as count FROM `users` WHERE `user_group` = 7 AND CAST(`reg_date` AS SIGNED) > 1368993600

但它仍然无法正常工作...我如何计算今天注册的用户数?

【问题讨论】:

  • 1) 为什么要使用 VARCHAR 字段来存储整数? 2) 为什么不使用 TIMESTAMP 类型的字段?如果为该字段添加索引,处理速度会快得多。
  • 这个网站的引擎不是我写的。我只是尝试添加此功能。

标签: mysql int varchar


【解决方案1】:

您扣除了一些错误,而您的错误在其他地方。 See this SQL Fiddle,使用您提到的相同数据结构并使用不带CAST 的第一个查询,您会看到它工作正常。仅返回 3 行,并且是值大于 1368993600 的行。

【讨论】:

  • 你说得对。 SQL Fiddle 返回 3 行。但在我的服务器上,相同的查询返回 470 - 所有用户的计数...
  • 如果您的服务器中的数据结构是相同的,并且您正在运行相同的查询,那么这意味着您有 470 行 reg_date 大于 1368993600。你可以做一个 mysqldump 的你的桌子,把它放在某个地方让我下载,这样我就可以看到你在说什么?
  • 哦,对不起。我刚刚重新检查了这个。查询工作正常。谢谢。
【解决方案2】:
SELECT COUNT(*) as count 
FROM `users` 
WHERE `user_group` = 7 
AND `reg_date` - timestamp(curdate()) >= 0

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多