2014-10-01 39 views
4

我正在將功能從SQL Server 2000遷移到MySQL。MySQL中的timestampdiff()等效於SQL Server中的datediff()嗎?

在SQL Server 2000中執行下面的語句,使輸出爲109

SELECT DATEDIFF(wk,'2012-09-01','2014-10-01') AS NoOfWeekends1 

在MySQL使用timestampdiff()代替datediff等效查詢,並給出了輸出爲108

SELECT TIMESTAMPDIFF(WEEK, '2012-09-01', '2014-10-01') AS NoOfWeekends1 

我需要輸出匹配在MySQL中執行時,所以它返回109.

+0

有趣的,可能是一個錯誤。 – Mihai 2014-10-01 09:43:45

+0

謝謝你,你是對的!問題是,現在我無法修改SQL Server代碼,它已經在應用程序中了。現在的事情是,我需要編寫需要給出SQL服務器代碼的等效結果的代碼。如果我需要使用「天」的意思,這兩個應用程序,我必須改變它。 – user2905792 2014-10-02 05:42:41

+0

如果您需要回複用戶,只有在您對他們的帖子發表評論時纔會通知他們,或者您在他們的用戶名中使用了@符號,例如:@Tanner。因爲你評論了你的問題,而不是我的回答,所以我沒有收到通知。我只是回來,因爲我的回答是投票,所以想檢查任何更新。 – Tanner 2014-10-02 08:51:05

回答

7

我認爲這可能是由2東西:

  • 什麼被歸類爲您的SQL Server和MySQL實例之間的星期的第一天。
  • 如何周的時間SQL Server和MySQL
  • 上週六,這似乎排除了一週,通常是星期天或星期一開始日 2012-09-01下降

你給定日期間計算。

MySQL有一個默認的開始日期:0 (Sunday)

要找出一週你的SQL Server開始,你可以通過運行這個使用@@DATEFIRST

select @@DATEFIRST -- default US English = 7 (Sunday) 

您可以將您的計算改變工作在幾天而不是幾周,然後除以7以獲得更精確的值,您可以根據自己的喜好進行修改:

MySQL:SQL Fiddle Demo

SELECT TIMESTAMPDIFF(DAY, '2012-09-01', '2014-10-01')/7 AS NoOfWeekends1 


| NOOFWEEKENDS1 | 
|---------------| 
|  108.5714 | 

SQL服務器:SQL Fiddle Demo

SELECT DATEDIFF(d,'2012-09-01','2014-10-01')/7.0 AS NoOfWeekends1 

| NOOFWEEKENDS1 | 
|---------------| 
| 108.571428 | 

你可以四捨五入向上或向下取決於如果你想以符合之前的結果或指望它作爲一個額外的週末。

的SQL Server似乎顯示爲this example fiddle,我已經改變了日期範圍爲2天,週六和週日來算週日的號碼(如果是一週的開始)2日期間:

SELECT DATEDIFF(wk,'2012-09-01','2012-09-02') AS NoOfWeekends1 

| NOOFWEEKENDS1 | 
|---------------| 
|    1 | 

凡在MySQL中相同的價值觀似乎只能指望了整整7天爲一個星期,如圖this demo fiddle

SELECT TIMESTAMPDIFF(WEEK, '2012-09-01', '2012-09-02') AS NoOfWeekends1 

| NOOFWEEKENDS1 | 
|---------------| 
|    0 | 

只有當了整整7天通你得到的結果1,你可以在this demo fiddle看到:

SELECT TIMESTAMPDIFF(WEEK, '2012-09-01', '2012-09-08') AS NoOfWeekends1 

| NOOFWEEKENDS1 | 
|---------------| 
|    1 |