2013-05-02 49 views
1

任何人都可以提出一个函数,将字符串转换为日期吗?MySQL字符串到日期(通用)

> This Function will takes a string and give: 
> 0000-00-00 if string cannot be converted (string in <> date out) 
> NULL if String NULL or blank(string in = date out) 
> yyyy-mm-dd if string can be converted (string in = date out) 
+0

什么码你尝试过这么远吗? – 2013-05-02 10:36:42

回答

0
> This Function will takes a string and give: 
> 0000-00-00 if string cannot be converted (string in <> date out) 
> NULL if String NULL or blank(string in = date out) 
> yyyy-mm-dd if string can be converted (string in = date out) 

Drop function if exists stringtodate; 

DELIMITER $$ 

CREATE FUNCTION `stringtodate`(v TEXT) Returns DATE 
BEGIN 
DECLARE result DATE; 

IF (v Is Null or v = '') THEN SET result = NULL; 
ELSEIF (STR_TO_DATE(v,'%d-%m-%Y') IS NOT NULL AND length(clean(v)) > 8) THEN SET result = STR_TO_DATE(v,'%d-%m-%Y'); 
ELSEIF (STR_TO_DATE(v,'%d,%m,%Y') IS NOT NULL AND length(clean(v)) > 8) THEN SET result = STR_TO_DATE(v,'%d,%m,%Y'); 
ELSEIF (STR_TO_DATE(v,'%d/%m/%Y') IS NOT NULL AND length(clean(v)) > 8) THEN SET result = STR_TO_DATE(v,'%d/%m/%Y'); 
ELSEIF (STR_TO_DATE(v,'%Y-%m-%d') IS NOT NULL AND length(clean(v)) > 8) THEN SET result = STR_TO_DATE(v,'%Y-%m-%d'); 
ELSEIF (STR_TO_DATE(v,'%Y,%m,%d') IS NOT NULL AND length(clean(v)) > 8) THEN SET result = STR_TO_DATE(v,'%Y,%m,%d'); 
ELSEIF (STR_TO_DATE(v,'%Y/%m/%d') IS NOT NULL AND length(clean(v)) > 8) THEN SET result = STR_TO_DATE(v,'%Y/%m/%d'); 
ELSEIF (STR_TO_DATE(v,'%d-%m-%y') IS NOT NULL AND length(clean(v)) < 10) THEN SET result = STR_TO_DATE(v,'%d-%m-%y'); 
ELSEIF (STR_TO_DATE(v,'%d,%m,%y') IS NOT NULL AND length(clean(v)) < 10) THEN SET result = STR_TO_DATE(v,'%d,%m,%y'); 
ELSEIF (STR_TO_DATE(v,'%d/%m/%y') IS NOT NULL AND length(clean(v)) < 10) THEN SET result = STR_TO_DATE(v,'%d/%m/%y'); 

ELSE SET result = CAST("0000-00-00" AS DATE); 

END IF; 

Return result; 

END