当前位置:Gxlcms > 数据库问题 > sql 自定义对日期进行处理的函数...

sql 自定义对日期进行处理的函数...

时间:2021-07-01 10:21:17 帮助过:8人阅读

-----oracle CREATE OR REPLACE FUNCTION RegexpDate(strDate in varchar2,dateType in number) RETURN number is results number; l_new_string VARCHAR2(255); l_new_date VARCHAR2(255); BEGIN if(instr(asciistr(strdate),\)>0 or ltrim(rtrim(strdate))=NaN-aN-aN or LENGTH(strdate) = 0 or UPPER(strdate) =NULL or ltrim(rtrim(strdate))=/ ) then--排除包含汉字的,值为0的,或者为null,及一些特殊字符 results:=0; else if(instr(strdate,.)>0 or LENGTH(ltrim(rtrim(replace(strdate,chr(10),‘‘))))=4 or length(strdate) - length(replace(strdate,-,‘‘))=1) then--对不能转为日期的数据,进行截取 IF( dateType = 1 ) THEN results:=substr(ltrim(rtrim(replace(strdate,chr(10),‘‘))),0,4); END IF; IF( dateType = 2) THEN results:=substr(ltrim(rtrim(replace(strdate,chr(10),‘‘))),6,1); END IF; IF( dateType = 3) THEN results:=0; END IF; IF( dateType = 4) THEN results:=0; END IF; IF( dateType = 5) THEN results:=0; END IF; IF( dateType = 6) THEN results:=0; END IF; else IF( dateType = 1 ) THEN results:=to_char(to_date( ltrim(rtrim(strdate)),yY-mm-dd hH:mi:ss),yyyy); END IF; IF( dateType = 2) THEN results:=to_char(to_date(ltrim(rtrim(strdate)),yY-mm-dd hH:mi:ss),MM); END IF; IF( dateType = 3 ) THEN results:=to_char(to_date(ltrim(rtrim(strdate)),yY-mm-dd hH:mi:ss),DD); END IF; IF( dateType = 4 ) THEN results:=to_char(to_date(ltrim(rtrim(strdate)),yY-mm-dd hH:mi:ss),HH24); END IF; IF( dateType = 5 ) THEN results:=to_char(to_date(ltrim(rtrim(strdate)),yY-mm-dd hH:mi:ss),MI); END IF; IF( dateType = 6 ) THEN results:=to_char(to_date(ltrim(rtrim(strdate)),yY-mm-dd hH:mi:ss),ss); END IF; end if; end if; RETURN (results); END RegexpDate; ----sql server CREATE FUNCTION RegexpDate(@strDate nvarchar(50), @dateType int) Returns int as BEGIN DECLARE @result nvarchar(50); IF( LEN(@strDate) = 0 or UPPER(@strDate) =NULL or ascii(@strDate)>127 or left(@strDate,5)=0-0-0 or CHARINDEX(.-,@strDate)>0 or right(@strDate,6)=- :1:1) begin SET @result= 0; end else begin if(CHARINDEX(,@strDate)>0) begin SET @strDate = REPLACE(REPLACE( REPLACE(@strDate, , - ), , - ), , ‘‘ ); end if( CHARINDEX(星期,@strDate)>0) begin set @strDate=LEFT(@strDate,LEN(@strDate)-3); end if(LEN(@strDate) - LEN(REPLACE(@strDate, -, ‘‘))=4 and RIGHT(@strDate,2)<>--) begin set @strDate=stuff(@strDate, 11, 1, ); set @strDate=stuff(@strDate, 14, 1, :); end if(right(@strDate,4)=:0:0) begin set @strDate=ltrim(rtrim(LEFT(@strDate,LEN(@strDate)-6))); end if (right(@strDate,2)=-0 or right(@strDate,2)=--or RIGHT(@strDate,2)=:: or right(@strDate,1)=-) begin if(@dateType=1) begin set @result=LEFT(@strDate,4); end if(@dateType=2) begin set @result=SUBSTRING(@strDate,6,1); end if(@dateType=3) begin set @result=0 end if(@dateType=4) begin set @result=0 end if(@dateType=5) begin set @result=0 end if(@dateType=6) begin set @result=0 end end else begin set @strDate=CONVERT(varchar(100), @strDate, 20); if(@dateType=1) begin set @result=Datename(year, @strDate); end if(@dateType=2) begin set @result=Datename(Month, @strDate); end if(@dateType=3) begin set @result=Datename(Day, @strDate); end if(@dateType=4) begin set @result=Datename(Hour, @strDate); end if(@dateType=5) begin set @result=Datename(Minute, @strDate); end if(@dateType=6) begin set @result=Datename(Second, @strDate); end end if(@result=--or @result=-) begin set @result=0; end end set @result=CAST(@result AS int ); RETURN @result; END; go --------------mysql CREATE DEFINER=`root`@`localhost` FUNCTION `RegexpDate`(`strDate` varchar(255),`dateType` int) RETURNS int(11) BEGIN DECLARE l_new_string VARCHAR ( 255 ); DECLARE l_new_date VARCHAR ( 255 ); DECLARE result INT; IF( LENGTH( strdate ) = 0 or UPPER(strdate) =NULL ) THEN SET result = 0; else if(locate(,strDate)>0) then SET strDate = REPLACE(REPLACE( REPLACE( strDate, , - ), , - ), , ‘‘ ); end if; if(str_to_date(strDate, %Y-%m-%d %H:%i:%s)<>null) then set l_new_date=str_to_date(strDate, %Y-%m-%d %H:%i:%s); end if; if(str_to_date(strDate, %Y.%m.%d %H:%i:%s)<>null) then set l_new_date=STR_TO_DATE(strDate,%Y.%m.%d %H:%i:%s); end if; if(str_to_date(strDate, %Y/%m/%d %H:%i:%s)<>null) then set l_new_date=STR_TO_DATE(strDate,%Y/%m/%d %H:%i:%s); end if; SET l_new_string = l_new_date; /* IF(locate(‘年‘,strDate)>0 ) THEN SET l_new_string = REPLACE(REPLACE( REPLACE( strDate, ‘年‘, ‘-‘ ), ‘月‘, ‘-‘ ), ‘日‘, ‘‘ ); ELSE SET l_new_string = l_new_date; END IF;*/ IF( dateType = 1 ) THEN SET result = YEAR( l_new_string ); END IF; IF( dateType = 2 ) THEN SET result = MONTH( l_new_string ); END IF; IF( dateType = 3 ) THEN SET result = DAY( l_new_string ); END IF; IF( dateType = 4 ) THEN SET result = HOUR(l_new_string ); END IF; IF( dateType = 5 ) THEN SET result = MINUTE(l_new_string); END IF; IF( dateType = 6 ) THEN SET result = SECOND(l_new_string); END IF; end if; RETURN result; END

 

sql 自定义对日期进行处理的函数...

标签:iis   ring   空格   roo   过程   to_date   sub   mon   var   

人气教程排行