簡體   English   中英

DATETIME列上的MySQL Join / Comparison(<5.6.4和> 5.6.4)

[英]MySQL Join/Comparison on a DATETIME column (<5.6.4 and > 5.6.4)

假設我有兩個像這樣的表:

Events
ID (PK int autoInc), Time (datetime), Caption (varchar)

Position
ID (PK int autoinc), Time (datetime), Easting (float), Northing (float)

例如,如果我使用“ Time字段作為加入條件,列出所有事件及其位置是否安全? 即:

SELECT E.*,P.* FROM Events E JOIN Position P ON E.Time = P.Time

或者,甚至只是簡單地比較日期時間值(考慮到參數化值可能包含小數秒部分-MySQL一直接受)

SELECT E.* FROM Events E WHERE E.Time = @Time

我了解MySQL(版本5.6.4之前)僅存儲datetime字段而沒有毫秒。 因此,我假設此查詢可以正常運行。 但是從版本5.6.4開始,我已經閱讀到MySQL現在可以使用datetime字段存儲毫秒。

假設使用諸如NOW()函數插入了datetime值,則毫秒數將被截斷(<5.6.4),我認為這將允許上述查詢工作。 但是,在5.6.4及更高版本中,這可能無法正常工作。 我是,並且永遠不會對第二精度感興趣。

如果有人可以回答以下問題,將不勝感激:

  1. 通常,MySQL如何相互比較日期時間字段(請考慮上述查詢)。
  2. 上面的查詢很好嗎,它是否使用時間字段上的索引? (MySQL <5.6.4)
  3. 有什么辦法可以排除毫秒? 即在插入以及有條件的聯接/選擇等時? (MySQL> 5.6.4)
  4. 上面的聯接查詢可以工作嗎? (MySQL> 5.6.4)

編輯

我知道我可以轉換日期時間,謝謝那些回答,但是我試圖在這里解決問題的根源(事實上,存儲類型/定義已更改),並且我不想在我的函數中使用函數查詢。 這否定了我使用索引等優化查詢的所有工作,更不用說重寫所有查詢了。

編輯2

有人可以提出理由不使用秒精度加入DATETIME字段的理由嗎?

似乎MySQL開發人員不想破壞向后兼容性,因此要使用毫秒,您必須明確地更改表,sql等才能使用此功能:

http://dev.mysql.com/doc/refman/5.6/zh-CN/date-and-time-functions.html#function_now

現在([fsp])

從MySQL 5.6.4開始,如果給fsp參數指定從0到6的小數秒精度,則返回值包括該位數的小數秒部分。 在5.6.4之前,任何參數都將被忽略。

http://dev.mysql.com/doc/refman/5.6/en/fractional-seconds.html

MySQL 5.6.4及更高版本擴展了對TIME,DATETIME和TIMESTAMP值的小數秒支持,精度高達微秒(6位):

要定義包含小數秒部分的列,請使用語法type_name(fsp),其中type_name是TIME,DATETIME或TIMESTAMP,fsp是小數秒精度。 例如:

CREATE TABLE t1 (t TIME(3), dt DATETIME(6)); The fsp value, if given, must be in the range 0 to 6. A value of 0 signifies that there is no fractional part. If omitted, the default precision is 0. (This differs from the standard SQL default of 6, for compatibility with previous MySQL versions.)

試試這個查詢。 對於問題3和4,這將很好地工作。 使用時間字段進行聯接仍然不是一個好習慣

SELECT E.*,P.* FROM Events E JOIN Position P ON date(E.Time) = date(P.Time)

盡管我已經給您提供了解決方案,但是您將只能在不同的表中插入相同的時間。 這樣您就可以進行比較,但這非常困難,因為您不能同時運行兩個插入查詢。 因此,您必須為此做一些菜單工作。 如果您想了解更多,請閱讀本文。

http://billauer.co.il/blog/2009/03/mysql-datetime-epoch-unix-time/

暫無
暫無

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

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