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

MySQL 自訂函數:判斷漢字、日期格式、純數字三大實用函數

     編輯:MySQL 資料庫相關知識

資料驗證常需在 SQL 層面判斷「是否為漢字」、「日期格式是否合法」、「是否為純數字」。以下提供三個可直接部署的 MySQL 函數,回傳 1=符合、0=不符合。

1. 判斷字串是否全為漢字

DROP FUNCTION IF EXISTS fc_is_hanzi;
CREATE FUNCTION fc_is_hanzi(p_str VARCHAR(1024))
RETURNS INT
DETERMINISTIC
BEGIN
    DECLARE i INT DEFAULT 1;
    DECLARE other_cnt INT DEFAULT 0;
    DECLARE acode INT;

    WHILE i <= CHAR_LENGTH(p_str) DO
        SET acode = ASCII(SUBSTRING(p_str, i, 1));
        -- GBK/Big5 雙位元組高位元範圍 124-254 (視字元集而定)
        IF acode < 124 OR acode > 254 THEN
            SET other_cnt = other_cnt + 1;
        END IF;
        SET i = i + 1;
    END WHILE;

    RETURN IF(other_cnt = 0, 1, 0);
END;

測試:SELECT fc_is_hanzi('中文測試'); -- 1 / SELECT fc_is_hanzi('Test123'); -- 0

2. 判斷日期格式合法性 (YYYYMMDD 或 YYYY-MM-DD)

DROP FUNCTION IF EXISTS fc_ck_date;
CREATE FUNCTION fc_ck_date(p_cont CHAR(32))
RETURNS TINYINT
DETERMINISTIC
BEGIN
    -- DATE_FORMAT 若解析失敗回傳 NULL
    RETURN IF(DATE_FORMAT(p_cont, '%Y%m%d') IS NULL, 0, 1);
END;

測試:SELECT fc_ck_date('2023-12-25'); -- 1 / SELECT fc_ck_date('2023-13-01'); -- 0

3. 判斷純數字 (正則)

DROP FUNCTION IF EXISTS fc_is_num;
CREATE FUNCTION fc_is_num(p_string VARCHAR(32))
RETURNS INT
DETERMINISTIC
BEGIN
    DECLARE res INT;
    SELECT p_string REGEXP '^[0-9]*$' INTO res;
    RETURN res;
END;

測試:SELECT fc_is_num('12345'); -- 1 / SELECT fc_is_num('12a45'); -- 0

部署與使用提醒

  • 建立函數需 CREATE ROUTINE 權限。
  • 函數為 DETERMINISTIC,查詢快取可生效。
  • 漢字判斷依賴字元集編碼規則,UTF-8 環境下 ASCII 判斷法不適用,建議改用 REGEXP '[\\x{4e00}-\\x{9fff}]' (需 MySQL 8.0+)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved