Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / PostgreSQL Новый топик    Ответить
 Перевести скрипт на Postgresql  [new]
Angelo Lagusa
Member

Откуда:
Сообщений: 21
Мне надо перевести скрипт написанной на Sql Server на Postgresql, прошу помощи. Благодарю

SQL Server:
select dateissue,sum(sum_credit_kzt) sum_credit_kzt, sum(loan_kzt) loan_kzt,count(loan_accnt_QPragma) cnt_contract,p.product,b.branch
from (select 
[b]dateadd(month,1,convert(datetime,convert(varchar(2),(month(dateadd(day,2-day(dateadd(day,0,data_issue)),(data_issue)))))+'/1/'+convert(char(4),year(dateadd(day,2-day(dateadd(day,0,data_issue)),(data_issue)))),101)) dateissue
[/b], s.*
from Aizhan.dbo.ssudnik_2013_2015 s
where year(period_report)>'2013'  and type_client='ФЛ')a
join prod p on p.Id_product=a.product and a.type_client=p.type_client
join branch b on b.id_branch=a.branch
where dateissue=period_report


На Postgresql я написал так, но к сожалению скрипт не работает:
select dateissue, sum(sum_credit_kzt) sum_credit_kzt, sum(loan_kzt) loan_kzt, count(loan_accnt_qpragma) cnt_contract, p.product, b.branch
from (select 
[b]dateadd(cast(datetime,cast((month((((data_issue + interval '1' day)),(data_issue)+interval '2-day' day))) as varchar)+'/1/' + cast(year((((data_issue + interval '0' day)),(data_issue) + interval '2-day' day)) as varchar)) + interval '1' month) dateissue[/b]
, s.*
from portfolio.ssudnik s
where to_char(period_report,'yyyy') > '2013'  and type_client = 'ФЛ') a
join prod p on p.Id_product = a.product and a.type_client = p.type_client
join branch b on b.id_branch = a.branch
where dateissue = period_report
29 янв 20, 08:05    [22068292]     Ответить | Цитировать Сообщить модератору
 Re: Перевести скрипт на Postgresql  [new]
Lonepsycho
Member

Откуда: Siauliai, Литва
Сообщений: 570
Angelo Lagusa,

перепишите запрос.
29 янв 20, 12:34    [22068530]     Ответить | Цитировать Сообщить модератору
 Re: Перевести скрипт на Postgresql  [new]
Angelo Lagusa
Member

Откуда:
Сообщений: 21
Lonepsycho, по подробнее пж. переписал не работает, не до конца перевел скрипт
29 янв 20, 12:39    [22068536]     Ответить | Цитировать Сообщить модератору
 Re: Перевести скрипт на Postgresql  [new]
Lonepsycho
Member

Откуда: Siauliai, Литва
Сообщений: 570
Angelo Lagusа
приводите ошибки, для более конкретных ответов

Сообщение было отредактировано: 29 янв 20, 13:30
29 янв 20, 13:29    [22068601]     Ответить | Цитировать Сообщить модератору
 Re: Перевести скрипт на Postgresql  [new]
Lonepsycho
Member

Откуда: Siauliai, Литва
Сообщений: 570
Angelo Lagusa,

interval '1' day, , select [b]dateadd(... , interval '2-day' day ....

посмотрите как пишутся литералы это для начала, "[b]" надеюсь артефакт какого-то редактора. дальше разбирать не буду, смотрите лог, какие ошибки получаете, и смотрите что да как не так.
29 янв 20, 13:41    [22068608]     Ответить | Цитировать Сообщить модератору
 Re: Перевести скрипт на Postgresql  [new]
Angelo Lagusa
Member

Откуда:
Сообщений: 21
Lonepsycho,

dateadd(month,1,convert(datetime,convert(varchar(2),(month(dateadd(day,2-day(dateadd(day,0,data_issue)),(data_issue)))))+'/1/'+convert(char(4),year(dateadd(day,2-day(dateadd(day,0,data_issue)),(data_issue)))),101)) dateissue

Именно эту строку не могу перевести на Postgresql,
(dateadd(month,1) вместо этого пишу (interval '1' month)
(datatime) перевел на (timestamp)

(month(dateadd(day,2-day(dateadd(day,0,data_issue)) эту строку не могу перевести правильно
29 янв 20, 14:18    [22068642]     Ответить | Цитировать Сообщить модератору
 Re: Перевести скрипт на Postgresql  [new]
entrypoint
Member

Откуда:
Сообщений: 227
Angelo Lagusa,

https://postgrespro.ru/docs/postgrespro/12/functions-datetime

SELECT 
	dt, 
	dt - interval '1 month', 
	dt + interval '1 month', 
	dt - interval '1 day', 
	dt + interval '1 day',
	dt - (dt - interval '1 day'),
	date_part('month', dt)
FROM (VALUES(NOW())) AS a(dt)


Сообщение было отредактировано: 29 янв 20, 14:35
29 янв 20, 14:32    [22068657]     Ответить | Цитировать Сообщить модератору
 Re: Перевести скрипт на Postgresql  [new]
entrypoint
Member

Откуда:
Сообщений: 227
Angelo Lagusa,

SELECT 
	dt, 
	dt - interval '1 month', 
	dt + interval '1 month', 
	dt - interval '1 day', 
	dt + interval '1 day',
	dt - (dt - interval '1 day'),
	date_part('month', dt),
	dt - ((24 - date_part('hour', dt)) || ' hour''')::interval 
FROM (VALUES(NOW())) AS a(dt)
29 янв 20, 14:53    [22068685]     Ответить | Цитировать Сообщить модератору
 Re: Перевести скрипт на Postgresql  [new]
entrypoint
Member

Откуда:
Сообщений: 227
Angelo Lagusa,

Если нужен специфический формат даты для вывода

SELECT to_char(NOW(), 'DD.MM.YYYY HH24:MI:SS')
29 янв 20, 15:09    [22068707]     Ответить | Цитировать Сообщить модератору
 Re: Перевести скрипт на Postgresql  [new]
Angelo Lagusa
Member

Откуда:
Сообщений: 21
entrypoint, просто я не могу перевести эту строку на Postgres, в синтаксисе ошибка.
dateadd(month,1,convert(datetime,convert(varchar(2),(month(dateadd(day,2-day(dateadd(day,0,data_issue)),(data_issue)))))+'/1/'+convert(char(4),year(dateadd(day,2-day(dateadd(day,0,data_issue)),(data_issue)))),101)) dateissue


я написал так, но в синтаксие ошибка
interval '1' month + (cast(datatime,cast((month(interval '2-day' day + (data_issue + interval '0' day),(data_issue)))as varchar) +'/1/'+ cast(year(interval '2-day' day + (interval '0' day + data_issue),(data_issue))as varchar))) as dateissue


Можете помочь со скриптом
30 янв 20, 11:43    [22069381]     Ответить | Цитировать Сообщить модератору
 Re: Перевести скрипт на Postgresql  [new]
entrypoint
Member

Откуда:
Сообщений: 227
Angelo Lagusa,

-- NOW() вместо dateissue
SELECT date_trunc('month', NOW())::timestamp + interval '1 month'
30 янв 20, 12:30    [22069446]     Ответить | Цитировать Сообщить модератору
 Re: Перевести скрипт на Postgresql  [new]
qwwq
Member

Откуда:
Сообщений: 2889
Angelo Lagusa,

просто сопоставьте типы и ф-ии, и попробуйте достичь требуемого , а не пытайтесь переводить индусский бред китайским способом

https://www.postgresql.org/docs/current/functions-datetime.html
vs
https://docs.microsoft.com/en-us/sql/t-sql/functions/date-and-time-data-types-and-functions-transact-sql?view=sql-server-ver15

например:
with d  (data_issue,_NUMBER) as (select date'now',13)
select
	data_issue
	,_NUMBER
	,date_part('day',data_issue)		--day(data_issue)
	,date_part('month',data_issue)		--month( data_issue)
	,date_part('year',data_issue)		--year( data_issue)
	,data_issue + (INTERVAL'1DAY')*_NUMBER as dateaddinterv -- dateadd(day,_NUMBER,data_issue )
	,data_issue + _NUMBER as dateaddint-- dateadd(day,_NUMBER,data_issue )
	, make_date(date_part('year',data_issue)::int,date_part('month',data_issue)::int,date_part('day',data_issue)::int)
	,(data_issue::timestamp - timestamp'2000-01-01') as noYearsButDays
	,data_issue + (INTERVAL'1Year')*date_part('year', (data_issue::timestamp - timestamp'2000-01-01')) dateadd21
	,data_issue + (INTERVAL'1Year')* (date_part('year', data_issue) - date_part('year',date'2000-01-01')) dateadd22
from d


ПС : что делает в мс скл dateadd(day,0,data_issue) ? ничего ? или транкейтит временную компоненту ? или кастит к дню ? судя по описанию -- ровным счётом ничего (сохраняет тип и добавляет 0-й интервал). и зачем тогда эту чушь переносить 1/1 ?
30 янв 20, 12:56    [22069488]     Ответить | Цитировать Сообщить модератору
 Re: Перевести скрипт на Postgresql  [new]
entrypoint
Member

Откуда:
Сообщений: 227
Angelo Lagusa,


Это не пример, это решение Вашего вопроса
-- NOW() вместо dateissue
SELECT date_trunc('month', NOW())::timestamp + interval '1 month'


строка выше эквивалента

SELECT dateadd(month,1,convert(datetime,convert(varchar(2),(month(dateadd(day,2-day(dateadd(day,0,data_issue)),(data_issue)))))+'/1/'+convert(char(4),year(dateadd(day,2-day(dateadd(day,0,data_issue)),(data_issue)))),101)) dateissue
30 янв 20, 16:26    [22069685]     Ответить | Цитировать Сообщить модератору
 Re: Перевести скрипт на Postgresql  [new]
Ролг Хупин
Member

Откуда: Чебаркуль
Сообщений: 3411
Angelo Lagusa
Lonepsycho, по подробнее пж. переписал не работает, не до конца перевел скрипт



так что попо дробнее?

"На Postgresql я написал так, но к сожалению скрипт не работает:"

скрипт так и "пишет": езвени братан, я к сожалению, не работаю?
3 фев 20, 15:42    [22071849]     Ответить | Цитировать Сообщить модератору
Все форумы / PostgreSQL Ответить