请你帮个忙将sql函数转换成pg函数,非常感谢

253451295 发布于 2014/06/04 03:58
阅读 228
收藏 0

@kenyon_君羊 你好,请你帮个忙将sql函数转换成pg函数,非常感谢

create      FUNCTION dbo.S_IsStrMatchFieldStr (
 @mstr nvarchar(100),
 @FieldStr nvarchar(1600)
)
RETURNS int AS  
BEGIN 
declare @fei int  --为1表示@FieldStr以非字开头,为0则不是
declare @r int
declare @str nvarchar(100)
declare @found int
declare @Len int

set @FieldStr=REPLACE(@FieldStr,' ','') --去掉所有空格
set @FieldStr=REPLACE(@FieldStr,',',',') --全角逗号替换为半角的
set @mstr=REPLACE(@mstr,' ','') --去掉所有空格
if (@FieldStr is NULL) or (@FieldStr='')  return 1  --条件字段为NULL,表示任意@mstr都允许

if (@FieldStr='空')  --如果条件字段中有一个汉字"空",表示@mstr为空时才算满足条件
begin
if (@mstr is NULL) or (@mstr='') return 1
else return 0
end
if @mstr is null or @mstr='' return 0
if (@FieldStr='非空')  --如果条件字段中有一个汉字"非空",表示@mstr为非空时才算满足条件
begin
if (@mstr is NULL) or (@mstr='') return 0
else return 1
end
if Left(@FieldStr,1)='非'
begin
set @fei=1
set @FieldStr=Right(@FieldStr,Len(@FieldStr)-1) --去掉非字再判断
end else
set @fei=0

set @FieldStr=','+@FieldStr+',' --左右两边加上逗号好开始查找

set @str=','+@mstr+','

set @found=0
if charindex(@str ,@FieldStr)=0 --如果没找到,再看是否是模糊匹配
begin
set @Len=Len(@mstr)
while(@Len>=0)
begin
set @str=','+Left(@mstr,@Len)+'*,'
set @Len=@Len-1
if charindex(@str ,@FieldStr)>0 --如果找到
begin
set @found=1
break;
end
end
end else
set @found=1

if @found=1 --如果找到
begin
 if @fei = 0 --如果没有非字
   set @r=1 --print 'match'
 else
   set @r=0 --print 'not match'
end else --如果没有找到
begin
 if @fei = 0 --如果没有非字
    set @r=0 --print 'not match'
 else
    set @r=1 --print 'match'
end
return @r
END


create   FUNCTION [dbo].[S_IsFitSize]
(
@x money, 
@Xstr nvarchar(100) --(21,2000]或者(301,]等等
)
RETURNS int --返回1表示成功,返回0表示失败. 即T中型号不在型号表中
AS
BEGIN
declare @str nvarchar(100)
declare @v int
declare @bFit int
declare @T1 int,@T2 int,@t int
declare @bFitX int,@bFitY int
declare @LeftChar nvarchar(10)
declare @RightChar nvarchar(10)
declare @i int
declare @s nvarchar(50)
--现在求Xstr的范围
set @str=@Xstr
set @v=@x
set @bfit=0
set @str=LTrim(@str)
set @str=RTrim(@str)
if (@str is null or @str='') set @bfit=1
else
begin
set @LeftChar=Left(@str ,1)
set @RightChar=Right(@str ,1)
if @LeftChar in ('(','[') and @RightChar in (')',']')
begin
set @str=SUBSTRING(@str ,2,len(@str)-2)
--现在处理 1,200 或者 ,200 或者200,这三种正常的情况
set @str=LTrim(@str)
set @str=RTrim(@str)
set @t=charindex(',',@str)
if @t=1 --如果是 ,200这样的情况,
begin
set @str=Right(@str ,Len(@str)-1)
if @str is not null and IsNumeric(@str)=1
begin
set @T2=@str
if (@v<@T2 and @RightChar=')') or (@v<=@T2 and @RightChar=']')
set @bfit=1
end
end else
if @t=Len(@str) --如果是 200,这样的情况,
begin
set @str=Left(@str ,Len(@str)-1)
if @str is not null and IsNumeric(@str)=1
begin
set @T1=@str
if (@v>@T1 and @LeftChar='(') or (@v>=@T1 and @LeftChar='[')
set @bfit=1
end
end else if @t>0
begin
if IsNumeric(Left(@str ,@t-1))=1
set @T1=Left(@str ,@t-1)
else
set @T1=null
if IsNumeric(Right(@str ,Len(@str)-@t))=1
set @T2=Right(@str ,Len(@str)-@t)
else
set @T2=null
if ((@v>@T1 and @LeftChar='(') or (@v>=@T1 and @LeftChar='[')) 
and
  ((@v<@T2 and @RightChar=')') or (@v<=@T2 and @RightChar=']'))
set @bfit=1
end
end
end
set @bfitX=@bfit
if @bFitX=1 return 1
return 0
END


加载中
0
kenyon_君羊
kenyon_君羊
Mssql的过程不是很熟,建议多看看PG的fun的demo。近期忙,刚上来看
返回顶部
顶部