如何从MySQL函数引用当前列值

问题描述

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

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

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,CHaraCTER_LENGTH(col2) - 2,CHaraCTER_LENGTH(col2) - 2)) AS col2 
       -> FROM soMetable;

解决方法

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

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中,参数将用column引用。