Я должен преобразовать функцию SQL в формат postgress
Ниже приведен возврат функции в SQL
SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER OFF GO CREATE FUNCTION [dbo].[Lk_Split](@String varchar(MAX), @Delimiter char(1)) returns @temptable TABLE (items varchar(MAX), rn int) as begin declare @idx int declare @slice varchar(8000) declare @rn int = 1 -- row number that increments with each value in the delimited string select @idx = 1 if len(@String)<1 or @String is null return while @idx!= 0 begin set @idx = charindex(@Delimiter,@String) if @idx!=0 set @slice = left(@String,@idx - 1) else set @slice = @String if(len(@slice)>0) insert into @temptable(Items, rn) values(@slice, @rn) set @String = right(@String,len(@String) - @idx) set @rn = @rn +1 if len(@String) = 0 break end return end GO
Мне нужно преобразовать эту функцию в базу данных Postgress, чтобы работать с ней в этой БД.
Что я уже пробовал:
Я попробовал следующее
CREATE FUNCTION LK_Split(String varchar(5000), Delimiter char(1)) returns table language plpgsql as $$ declare idx integer; slice varchar(8000); table1 table; select idx = 1 if length(String)<1 or String is null return while idx!= 0 begin set idx = charindex(Delimiter,String); if idx!=0 set slice = left(String,idx - 1; else set slice = String ; if(length(slice)>0) select values(slice) into temptable(Items) from table1 return table1; set String = right(String,length(String) - idx) if length(String) = 0 break ; end; end; $$;
Но он не работает из-за возврата табличного значения.
CHill60
Пожалуйста, уточните, что означает "не работает из-за возврата табличного значения"
Member 11776570
Просто мне нужно преобразовать эту SQL-функцию в Postgres, поэтому я не могу ее преобразовать. Пожалуйста, если вы можете преобразовать его или сделать ту же функцию, которая работает в базе данных postgres.
CHill60
Что не так с кодом, который вы уже преобразовали?
Мы делаем это в свободное время и более чем рады помочь, но мы не делаем вашу работу за вас. Кроме того, очень трудно переписать sql без схем таблиц, примеров данных или ожидаемых результатов.
Вы также проделали некоторую работу, но утверждаете, что она не работает, но я не понимаю предложения "но она не работает из-за возврата табличного значения." Так что просто уточните, что это значит.
Кстати - если вы используете кнопку ответа на сообщение, то участник будет уведомлен о вашем ответе
Member 11776570
Это предложение "но оно не работает из-за возврата табличного значения" означает, что возвращаемая таблица, которую я использовал, не работает в Postgres. Я хочу, чтобы та же самая функция была в Postgres nothiugn else.
Ниже приведены примерные данные.
(А,А,А,С,С,С,С,С, А,А,"","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","")