2013-05-20 25 views
0

在我的網站上,用戶註冊日期存儲爲varchar(20)列中的時間戳記。我想統計今天有多少用戶註冊,我寫過查詢:MySQL - 帶INT的Comparsion VARCHAR

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 

但它仍然無法正常工作......我如何計算今天註冊的用戶?

+0

1)爲什麼使用VARCHAR字段來存儲整數? 2)爲什麼不使用TIMESTAMP類型的字段?處理的速度會快很多,如果您爲該字段添加索引,則會更快。 –

+0

本網站的引擎並未由我撰寫。我只是嘗試添加此功能。 –

回答

1

您正在扣除錯誤,並且您的錯誤在其他地方。 See this SQL Fiddle,使用您提及的相同數據結構並使用您的第一個查詢,但沒有CAST,您將看到它工作正常。只有3行被返回,並且其值大於1368993600.

+0

你說得對。 SQL小提琴返回3行。但在我的服務器上,同樣的查詢會返回470 - 所有用戶的數量...... –

+0

如果在您的服務器中數據結構相同,並且您正在運行相同的查詢,那麼這意味着您有470行「reg_date」大於1368993600你可以在你桌子上做一個'mysqldump'並把它放在某個地方供我下載,所以我可以看到你在說什麼? –

+0

哦,對不起。我只是重新檢查了這一點。查詢正常。謝謝。 –

1
SELECT COUNT(*) as count 
FROM `users` 
WHERE `user_group` = 7 
AND `reg_date` - timestamp(curdate()) >= 0