zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    自此KYang独一人
    根本不存在 DIV + CSS 布局这回事转
    释德扬,少林大师教你简易健身法
    只让指定的机器连接SQLServer服务器
    Visual Studio 2005 IDE模板丢失的解决方法
    asp.net 未能加载视图状态
    如何控制触发器递归
    4G相关标准UMB/LTE/WiMAX介绍
    Linq To Sql 项目从Beta迁移到RTM注意事项
    保护眼睛的windows窗口颜色
  • 原文地址:https://www.cnblogs.com/wxxf/p/11320790.html
Copyright © 2011-2022 走看看