Конвертировать в Mysql - PullRequest
       1

Конвертировать в Mysql

0 голосов
/ 05 февраля 2020
with services as (

   select 1 id_service, 1 id_contract, to_date('01.01.2019', 'dd.mm.yyyy') date_start, to_date(null) date_stop from dual union all

   select 2, 1, to_date('01.02.2019', 'dd.mm.yyyy'), to_date('01.03.2019', 'dd.mm.yyyy') from dual union all

   select 3, 1, to_date('01.02.2017', 'dd.mm.yyyy'), to_date('01.03.2019', 'dd.mm.yyyy') from dual union all

   select 4, 2, to_date('01.11.2018', 'dd.mm.yyyy'), to_date('01.05.2019', 'dd.mm.yyyy') from dual union all

   select 5, 2, to_date('05.03.2017', 'dd.mm.yyyy'), to_date(null) from dual union all

   select 6, 2, to_date('01.02.2018', 'dd.mm.yyyy'), to_date('31.12.2018', 'dd.mm.yyyy') from dual union all

   select 7, 3, to_date('01.02.2018', 'dd.mm.yyyy'), to_date('31.12.2018', 'dd.mm.yyyy') from dual union all

   select 8, 3, to_date('01.01.2018', 'dd.mm.yyyy'), to_date('31.12.2018', 'dd.mm.yyyy') from dual union all

   select 9, 3, to_date('01.01.2018', 'dd.mm.yyyy'), to_date('01.03.2017', 'dd.mm.yyyy') from dual
)

select * from services

Как я могу преобразовать это Oracle в Mysql?

Ответы [ 2 ]

0 голосов
/ 05 февраля 2020

Вам необходимо заменить вызовы to_date() на MySQL str_to_date(), а затем просто удалить from dual. Например:

select 1 id_service, 1 id_contract, str_to_date('01.01.2019', 'dd.mm.yyyy') date_start, null date_stop union all
select 2, 1, str_to_date('01.02.2019', '%d.%m.%Y'), str_to_date('01.03.2019', '%d.%m.%Y')  union all
select 3, 1, str_to_date('01.02.2017', '%d.%m.%Y'), str_to_date('01.03.2019', '%d.%m.%Y')  union all
select 4, 2, str_to_date('01.11.2018', '%d.%m.%Y'), str_to_date('01.05.2019', '%d.%m.%Y')  union all
select 5, 2, str_to_date('05.03.2017', '%d.%m.%Y'), null union all
select 6, 2, str_to_date('01.02.2018', '%d.%m.%Y'), str_to_date('31.12.2018', '%d.%m.%Y')  union all
select 7, 3, str_to_date('01.02.2018', '%d.%m.%Y'), str_to_date('31.12.2018', '%d.%m.%Y')  union all
select 8, 3, str_to_date('01.01.2018', '%d.%m.%Y'), str_to_date('31.12.2018', '%d.%m.%Y')  union all
select 9, 3, str_to_date('01.01.2018', '%d.%m.%Y'), str_to_date('01.03.2017', '%d.%m.%Y') 

Демонстрация по db <> fiddle .

Обратите внимание, что для использования предложения WITH в MySQL вам необходимо запустить современную версию как 8. Это не поддерживается в MySQL 5.6.

0 голосов
/ 05 февраля 2020

Предполагая, что в MySQL вы хотите добиться такого результата, как этот ...

+------------+-------------+------------+------------+
| id_service | id_contract | date_start | date_stop  |
+------------+-------------+------------+------------+
|          1 |           1 | NULL       | NULL       |
|          2 |           1 | 2019-02-01 | 2019-03-01 |
|          3 |           1 | 2017-02-01 | 2019-03-01 |
|          4 |           2 | 2018-11-01 | 2019-05-01 |
|          5 |           2 | 2017-03-05 | NULL       |
|          6 |           2 | 2018-02-01 | 2018-12-31 |
|          7 |           3 | 2018-02-01 | 2018-12-31 |
|          8 |           3 | 2018-01-01 | 2018-12-31 |
|          9 |           3 | 2018-01-01 | 2017-03-01 |
+------------+-------------+------------+------------+

... тогда вы можете использовать это ...

   select 1 id_service, 1 id_contract, str_to_date('01.01.2019', 'dd.mm.yyyy') date_start, null date_stop from dual union all
   select 2, 1, str_to_date('01.02.2019', '%d.%m.%Y'), str_to_date('01.03.2019', '%d.%m.%Y') from dual union all
   select 3, 1, str_to_date('01.02.2017', '%d.%m.%Y'), str_to_date('01.03.2019', '%d.%m.%Y') from dual union all
   select 4, 2, str_to_date('01.11.2018', '%d.%m.%Y'), str_to_date('01.05.2019', '%d.%m.%Y') from dual union all
   select 5, 2, str_to_date('05.03.2017', '%d.%m.%Y'), null from dual union all
   select 6, 2, str_to_date('01.02.2018', '%d.%m.%Y'), str_to_date('31.12.2018', '%d.%m.%Y') from dual union all
   select 7, 3, str_to_date('01.02.2018', '%d.%m.%Y'), str_to_date('31.12.2018', '%d.%m.%Y') from dual union all
   select 8, 3, str_to_date('01.01.2018', '%d.%m.%Y'), str_to_date('31.12.2018', '%d.%m.%Y') from dual union all
   select 9, 3, str_to_date('01.01.2018', '%d.%m.%Y'), str_to_date('01.03.2017', '%d.%m.%Y') from dual

Примечание что у MySQL есть понятие «дуал», но на самом деле в этом нет необходимости.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...