2014-10-01 1 views
4

SQL 서버 2000에서 MySQL로 기능을 이전하려고합니다.SQL Server의 datediff()와 동일한 MySQL의 timestampdiff()입니까?

SQL Server 2000에서 실행되는 다음 문은, 109

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

mysql을 대신 datedifftimestampdiff()를 사용에서의 동등한 쿼리로 출력을 제공하고 108

SELECT TIMESTAMPDIFF(WEEK, '2012-09-01', '2014-10-01') AS NoOfWeekends1 
로 출력을 제공합니다

MySQL에서 실행될 때 일치하도록 출력이 필요하므로 109를 반환합니다.

+0

재미있는 것은 버그 일 수 있습니다. – Mihai

+0

감사합니다, 당신 말이 맞아요!문제는 이제 SQL Server 코드를 수정할 수 없다는 것입니다. 이미 응용 프로그램에있었습니다. 이제 SQL 서버 코드와 동일한 결과를 제공해야하는 코드를 작성해야합니다. "DAY"를 사용해야하는 경우, 두 애플리케이션 모두 변경해야합니다. – user2905792

+0

사용자에게 답장해야하는 경우 게시물에 댓글을 달거나 사용자 이름과 함께 @ 기호를 사용하는 경우 (예 : @Tanner)에만 알림이 전송됩니다. 당신이 내 대답이 아닌 당신의 질문에 대해 언급했기 때문에, 나는 통보를받지 못했습니다. 나는 나의 대답이 투표로 결정되었을 때 돌아 왔을 뿐이므로 업데이트를 확인하고 싶었다. – Tanner

답변

7

이 문제는 2 항목 :

  • SQL Server 인스턴스와 MySQL 인스턴스 사이의 첫 번째 요일로 분류됩니다. 주이 SQL 서버와 MySQL 일반적으로 일요일 또는 월요일 일주일의 시작 일을 배제 것으로 보인다 토요일에 떨어지면 2012-09-01

귀하의 특정 날짜 사이에 계산되는 방법

  • . 이 프로그램을 실행하여 @@DATEFIRST을 사용할 수 있습니다 0 (Sunday)

    하면 주 SQL 서버의 시작을 찾는 방법은 다음과 같습니다 :

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

    당신은 당신의 계산을 바꿀 수

    MySQL은의 기본 시작 일이있다 몇 주일이 아닌 일을하고 7로 나누면보다 정확한 값을 얻을 수 있습니다.

    MySQL : 01 2,

    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는 두 날짜 사이 (즉, 일주일의 시작 인 경우) 나는 2 일 토요일과 일요일로 날짜 범위를 변경 한 this example fiddle과 같이 일요일의 수를 계산하는 것 같다 :

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

    경우 MySQL은 같은 값은 this demo fiddle 같이 일주일로 전체 7 일 카운트 보인다 : 전체 칠일 당신의 결과를 얻을 통과 할 때

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

    그것은 단지입니다 1에서 볼 수 있듯이 this demo fiddle :

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