簡體   English   中英

SQL將日期字符串轉換為查詢中的unix時間戳

[英]SQL Convert date string to unix timestamp in query

我有一個帶有last_login列的用戶表。 這是用戶的內容示例:

2014-06-30 14:53:14

我想返回一個活躍用戶列表。 活動用戶是過去20天內登錄的用戶。

我的邏輯是:

  1. 獲取20天前在Unix時間戳中的日期: $twenty_days_ago = strtotime('20 days ago');
  2. 獲取last_login > $twenty_days_ago所有用戶

是否可以將我的last_login字符串轉換為sql代碼中的unix時間戳? 無需返回所有用戶並循環遍歷數組以檢查每個用戶行?

像: strtotime(last_login) > $twenty_days_ago

謝謝!

對,但是...

為了獲得良好性能的最佳鏡頭,我們更喜歡謂詞中的裸列,並避免在函數中包裝列。 (MySQL不會對包含在函數中的列使用索引范圍掃描。

要在last_login列上啟用索引范圍掃描,我們更喜歡這種形式的謂詞:

WHERE t.last_login > NOW() - INTERVAL 20 DAY

如果您作為參數傳入的是整數unix時間戳,那么轉換該文字(一次)以匹配last_login列的數據類型會更好。 MySQL提供了可以執行此轉換的FROM_UNIXTIME()函數。 例如:

WHERE t.last_login > FROM_UNIXTIIME(1402416849) 

您的問題的答案是“是”,可以以您詢問的形式編寫查詢。 您可以使用UNIX_TIMESTAMP函數:

WHERE UNIX_TIMESTAMP(t.last_login) > 1402416849 

同樣,如上所述,這種方法禁用了MySQL使用范圍掃描操作的能力。 此表單強制MySQL為表中的每一行計算UNIX_TIMESTAMP函數,然后將結果與文字進行比較。

當我們在“文字”側進行轉換時,轉換完成一次,我們可以引用謂詞中的裸列。

注意:當客戶端的時區與服務器的時區不匹配時,還要注意時區轉換問題; 行為可能是意料之外的,但它的定義很明確。

聽起來像你真正需要的是一個將根據datetime列選擇的select語句。

SELECT id FROM users WHERE last_login >= NOW() - INTERVAL 20 DAY

要么

嘗試本文作為在PHP UNIX時間戳和mySQL時間戳之間進行轉換的良好起點http://www.richardlord.net/blog/dates-in-php-and-mysql

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM