Oracle的几个函数在MySQL里面的简单实现


最忌在做Oracle到MySQL得迁移,以下我写了三个简单的MySQL里面米有的函数。 供大家参考。

判断是否为时间?

  1. DELIMITER $$   
  2. USE `ytt`$$   
  3. DROP FUNCTION IF EXISTS `is_date`$$   
  4. CREATE DEFINER=`root`@`localhost` FUNCTION `is_date`(  
  5. f_in CHAR(19)) RETURNS TINYINT(4)  
  6. BEGIN  
  7.   -- Created by david.yang 2012/8/9.   
  8.   IF UNIX_TIMESTAMP(f_in) = 0 THEN  
  9.     RETURN 0;  
  10.   ELSE  
  11.     RETURN 1;  
  12.   END IF;  
  13. END$$  
  14.   
  15.   
  16. DELIMITER ;  

判断是否为数字?

  1. DELIMITER $$   
  2. USE `ytt`$$   
  3. DROP FUNCTION IF EXISTS `is_number`$$   
  4. CREATE DEFINER=`root`@`localhost` FUNCTION `is_number`(  
  5.     f_in VARCHAR(255)) RETURNS TINYINT(4)  
  6. label1:BEGIN  
  7.     -- Created by david.yang 2012/8/9.   
  8.     DECLARE cnt INT UNSIGNED DEFAULT 0;  
  9.     DECLARE i INT UNSIGNED DEFAULT 1;  
  10.     DECLARE j INT UNSIGNED DEFAULT 0;  
  11.     SET cnt = LENGTH(f_in);  
  12.     loop1:WHILE i < cnt  
  13.     DO  
  14.       SET j = ASCII(SUBSTR(f_in,i,1));  
  15.       IF  j < 48 OR j > 57 THEN  
  16.         RETURN 0;  
  17.         LEAVE label1;  
  18.       END IF;  
  19.       SET i = i + 1;  
  20.     END WHILE loop1;  
  21.     RETURN 1;  
  22.   END$$   
  23. DELIMITER ;  

ORACLE to_date 函数的MYSQL实现。

  1. DELIMITER $$  
  2.   
  3.   
  4. USE `ytt`$$  
  5.   
  6.   
  7. DROP FUNCTION IF EXISTS `to_date`$$  
  8.   
  9.   
  10. CREATE DEFINER=`root`@`localhost` FUNCTION `to_date`(  
  11.     f_date VARCHAR(30), f_format VARCHAR(30)  
  12.     ) RETURNS VARCHAR(30) CHARSET utf8  
  13. BEGIN  
  14.     -- '20-08-2011 22:55:02', 'dd-mm-yyyy hh24:mi:ss'   
  15.     -- '02-11-2011', 'dd-mm-yyyy'   
  16.     -- Created by david.yang 2012/8/9.   
  17.     DECLARE i_year CHAR(4);  
  18.     DECLARE i_month CHAR(2);  
  19.     DECLARE i_day CHAR(2);  
  20.     DECLARE i_time CHAR(8);  
  21.     SET i_year = SUBSTR(f_date,7,4);  
  22.     SET i_month = SUBSTR(f_date,4,2);  
  23.     SET i_day = LEFT(f_date,2);  
  24.       
  25.     IF LENGTH(f_date) = 10 THEN  
  26.       SET i_time = '';  
  27.     ELSE  
  28.       SET i_time = RIGHT(f_date,8);  
  29.     END IF;  
  30.     RETURN CONCAT(i_year,'-',i_month,'-',i_day,' ',i_time);  
  31.     END$$    
  32.   
  33. DELIMITER ;  

相关内容