我正在尝试编写一个 MySQL 函数,该函数从格式化为 JSON 字典的文本字段中提取值。但是,由于某种原因,我无法让嵌套的 IF 语句在没有语法错误的情况下工作。
这是函数:
DROP FUNCTION IF EXISTS json_key;
DELIMITER $$
CREATE FUNCTION `json_key`(`col` TEXT, `key` VARCHAR(255)) RETURNS VARCHAR(255)
DETERMINISTIC
BEGIN
DECLARE ret VARCHAR(255);
DECLARE pos INT;
IF (col IS NULL) THEN SET ret = "";
ELSEIF (col = "") THEN SET ret = "";
ELSEIF (LOCATE(key, col) = 0) THEN SET ret = "";
ELSE
SET pos := LOCATE(key, col);
SET len := LENGTH(key);
SET bg := pos + len;
SET ret = SUBSTR(col, bg, LOCATE('"', col, bg) - bg));
END IF;
RETURN ret;
END $$
DELIMITER ;
这是我收到的错误:
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that
corresponds to your MySQL server version for the right syntax to
use near 'key, col) = 0) THEN SET ret = "";
ELSE
SET pos := LOCATE(key, col);
SET len :=' at line 7
知道我缺少什么吗?
最佳答案
key
是保留字。
使用不同的名称,例如 jKey
或使用反引号 (`) 来接受它
更改这些行:
ELSEIF (LOCATE(key, col) = 0) THEN SET ret = "";
ELSE
SET pos := LOCATE(key, col);
SET len := LENGTH(key);
致:
ELSEIF (LOCATE(`key`, col) = 0) THEN SET ret = "";
ELSE
SET pos := LOCATE(`key`, col);
SET len := LENGTH(`key`);
关于mysql - 在 MySQL 嵌套 If 中检查 Null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22768026/