首页 > 解决方案 > 如何从 MySQL 函数中引用当前列值

问题描述

我想创建一个用“。”替换中间字符的函数。列值中的(点)(例如:'something' => 's........g')

问题是我不知道如何引用函数体内的当前列值,我正在寻找类似thisJavaScript 中的关键字的东西

DELIMITER$$
CREATE FUNCTION middleDots()
  RETURNS  --current datatype
    BEGIN
      --how to reference the current column value?
      
      RETURN --current modified colum value
    END$$
DELIMITER;

所以我可以使用这样的功能

SELECT middleDots(col1) AS col1, middleDots(col2) AS col2 FROM someTable;

我可以编写一个查询,这很好,但使用一个简单的函数会好得多

询问 :

   mysql> SELECT col1,
       ->   INSERT(col1, 2, CHARACTER_LENGTH(col1) - 2, REPEAT('.', CHARACTER_LENGTH
(col1) - 2)) AS col1,
       ->   INSERT(col2, 2, CHARACTER_LENGTH(col2) - 2, REPEAT('.', CHARACTER_LENGTH(col2) - 2)) AS col2 
       -> FROM someTable;

标签: mysqlfunction

解决方案


您可以通过以下方式创建函数:

DROP FUNCTION IF EXISTS middleDots;

DELIMITER $$

CREATE FUNCTION middleDots(`input` VARCHAR(255))
RETURNS VARCHAR(255)
BEGIN
      DECLARE `output` varchar(255) DEFAULT '';

      SELECT CONCAT(
          LEFT(`input`, 1), 
          REPEAT('.', CHARACTER_LENGTH(`input`) - 2),
          RIGHT(`input`, 1)) INTO `output`;
         
        RETURN `output`;
END$$
DELIMITER ;

在此代码中,函数input参数将被列引用。


推荐阅读