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

Posted wxxf

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql 自定义对日期进行处理的函数...相关的知识,希望对你有一定的参考价值。

以下是在写对日期处理的函数过程中用到的一些sql 函数。。。

asciistr()把字符转换为ASCII码,汉字会转成"\XXXX"格式,可以用来排除汉字.

ltrim(rtrim(strdate)) 去掉前后的空格。

ltrim(rtrim(replace(strdate,chr(10),‘‘)))去掉换行符和前后的空格

to_char(to_date( ltrim(rtrim(strdate)),‘yY-mm-dd hH:mi:ss‘),‘yyyy‘); 转换成日期格式,并取年,也可以取月日时分秒(MM,DD,HH24 ,MI,ss)

length(strdate) - length(replace(strdate,‘-‘,‘‘))查看某个字符在字符串中的位置(字符串长度-替换掉某个字符的字符串长度)

-------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 自定义对日期进行处理的函数...的主要内容,如果未能解决你的问题,请参考以下文章

Oracle SQL 两个日期类型毫秒值求差,日期转毫秒,时间差(ms)自定义函数解决毫秒差

SQL - 自定义日期组

帆软自定义函数其他系统也要用怎么做

使用ivx实现日期格式转换的经验总结

如何优化Oracle在where条件中用了自定义函数的SQL语句

是否可以在 ExtJS 3.2 中对日期进行自定义排序