2014-09-14 5 views
0

Когда я выполнить этот SQL-код:.получить дни между датами

SELECT 
     ROW_NUMBER() OVER (ORDER BY schdate), 
     ACCT , 
     SCHDATE AS DATES, 
     NULL AS ORS 
     FROM AMORT 
     WHERE ACCT = '0000360' AND CYCLE = '0001' AND principal <> '0.00' 
    UNION ALL 
    SELECT 
     ROW_NUMBER() OVER (ORDER BY ddate), 
     ACCT, 
     DDATE AS DATES, 
     OR_NO AS ORS 
     FROM LEDGER 
     WHERE (ACCT = '0000360' AND CYCLE = '0001') AND (t_code = '10' OR t_code = '11' OR t_code = '12' OR t_code = '13') 
    ORDER BY DATES 

Я получил этот результат, но как я могу выполнить, чтобы иметь дней между датами?

ACCT |  DATES |  ORS 
------------------------------------- 
0000360 |2014-07-26 | (NULL) 
0000360 |2014-08-02 | (NULL) 
0000360 |2014-08-05 | 011290000113 
0000360 |2014-08-09 | (NULL) 
0000360 |2014-08-16 | (NULL) 
0000360 |2014-08-19 | 011290000559 

Я хотел бы получить дни между датами, как показано на рисунке ниже ..

ACCT |  DATES |  ORS 
------------------------------------- 
====================== 
0000360 |2014-07-26 || (NULL) 
0000360 |2014-08-02 || (NULL) 
====================== 
0000360 |2014-08-05 | 011290000113 
====================== 
0000360 |2014-08-09 || (NULL) 
0000360 |2014-08-16 || (NULL) 
====================== 
0000360 |2014-08-19 | 011290000559 

Получить даты без ПРС и считать дни между тот день, например:

ACCT |  DATES |  ORS 
------------------------------------- 
====================== 
0000360 |2014-07-26 || (NULL) 
0000360 |2014-08-02 || (NULL) 
====================== 

Таким образом, между 2014-07-26 и 2014-08-02 счетные дни 7

====================== 
0000360 |2014-08-09 || (NULL) 
0000360 |2014-08-16 || (NULL) 
====================== 

и для этого 2014-08-09 и 2014-08-16 счетных дней 7

+0

[ 'BETWEEN'] (HTTP: // WWW. mysqltutorial.org/mysql-between) - это вариант. См. Также раздел «Связанный» справа. Одним из которых является http://stackoverflow.com/q/510012/ –

+1

Какие СУБД вы используете? У вас есть tagged 'mysql', но у него нет функции' ROW_NUMBER() '. – Barmar

+0

im, используя sqlanywhere. как я могу получить разницу, особенно они находятся в одном столбце –

ответ

0
<?php 

$date1 = strtotime("2014-08-09"); 
$date2 = strtotime("2010-08-16"); 
$datediff = abs($date1 - $date2); 
echo floor($datediff/(60*60*24)); 

?> 

абс есть, так что вы всегда получите положительный результат.

В Mysql Применение:

SELECT DATEDIFF('new_date', 'old_date'); 

SELECT DATEDIFF('2014-08-16','2014-08-09'); 
+0

, как получить разницу между датами, если они находятся в одном столбце? –

0

Один из способов вы можете иметь MySQL вычислить некоторые данные для каждой строки в наборе результатов, и включают в себя, что в качестве части результата, заключается в использовании определенных пользователем переменных ,

Например, (тестовые данные):

CREATE TABLE `demo` (
    `date` date NOT NULL 
); 

INSERT INTO `demo` (`date`) VALUES 
('2014-09-09'), 
('2014-09-10'), 
('2014-09-12'); 

И тогда запрос:

SET @date_last = '2014-08-01'; 
SELECT date, DATEDIFF(`date`, @date_last), (@date_last := `date`) FROM `demo`; 

Возвращает

|2014-09-09|39|2014-09-09 
|2014-09-10| 1|2014-09-10 
|2014-09-12| 2|2014-09-12 
+0

tnx man !, но мои даты происходят из разных таблиц. как я могу это сделать, используя объединение всех с 2 таблицами –