mysql - 在 MySQL 嵌套 If 中检查 Null

标签 mysql json if-statement

我正在尝试编写一个 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 Reserved Words

关于mysql - 在 MySQL 嵌套 If 中检查 Null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22768026/

相关文章:

mysql - 不存在则插入,存在则更新

java - Java 中的 IoT 模块 GET 请求

java - Java 中 false boolean 值后重新启动 While 循环

c++ - 在 if 语句中声明类变量

java - "java.sql.SQLException: Field ' id_parent ' doesn' t have a default value"与一对多关系映射

mysql - 如何将本地 MySQL 数据库连接到 IBM Node-Red 平台

php - PHP Echo 中的 SQL 语句,HTML 标记中的 SQL 语句

android无法解析单个json元素

ios - 如何从 NSDictionary 获取键/值对?

c# - 从 If 语句返回 Int