首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 判斷漢字、日期、數字的三個實用自定義函數

     編輯:MySQL 資料庫相關知識

函數一:判斷純漢字

DROP FUNCTION IF EXISTS fc_is_hanzi;
CREATE FUNCTION fc_is_hanzi(p_str VARCHAR(1024)) RETURNS INT
NOT DETERMINISTIC SQL SECURITY DEFINER COMMENT '檢查字符串是否為漢字'
BEGIN
    DECLARE _ret INT DEFAULT 0;
    DECLARE i INT DEFAULT 1;
    DECLARE other_cnt INT DEFAULT 0;
    DECLARE l_acode INT DEFAULT 0;
    
    WHILE i <= CHAR_LENGTH(p_str) DO
        SET l_acode = ASCII(SUBSTRING(p_str, i, 1));
        IF l_acode < 124 OR l_acode > 254 THEN
            SET other_cnt = other_cnt + 1;
        END IF;
        SET i = i + 1;
    END WHILE;
    
    IF other_cnt = 0 THEN SET _ret = 1; ELSE SET _ret = 0; END IF;
    RETURN _ret;
END;

返回: 1=全漢字,0=含非漢字

函數二:驗證日期格式

DROP FUNCTION IF EXISTS fc_ck_date;
CREATE FUNCTION fc_ck_date(p_cont CHAR(32)) RETURNS TINYINT
NOT DETERMINISTIC SQL SECURITY DEFINER COMMENT '判定日期格式是否正確'
BEGIN
    -- 支援 yyyyMMdd 或 yyyy-MM-dd
    IF (SELECT DATE_FORMAT(p_cont, '%Y%m%d')) IS NULL THEN
        RETURN 0;
    ELSE
        RETURN 1;
    END IF;
END;

函數三:判斷純數字

DROP FUNCTION IF EXISTS fc_is_num;
CREATE FUNCTION fc_is_num(p_string VARCHAR(32)) RETURNS INT
NOT DETERMINISTIC SQL SECURITY DEFINER COMMENT '檢查字符串是否為純數字'
BEGIN
    DECLARE iResult INT DEFAULT 0;
    SELECT p_string REGEXP '^[0-9]*$' INTO iResult;
    RETURN iResult;  -- 1=純數字,0=非純數字
END;

調用示例

SELECT fc_is_hanzi('中文測試');     -- 1
SELECT fc_is_hanzi('中文123');       -- 0
SELECT fc_ck_date('2024-01-15');     -- 1
SELECT fc_ck_date('2024/01/15');     -- 0
SELECT fc_is_num('12345');           -- 1
SELECT fc_is_num('12.34');           -- 0

性能提示

  • 函數逐字符循環,大量數據慎用於 WHERE 條件
  • 數字判斷用 REGEXP 內部優化,效率較高
  • 生產環境建議應用層校驗,數據庫僅做兜底
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved