社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  DATABASE

MySQL中Create Function语句存在问题

muncieharts • 3 年前 • 1311 次点击  

我试图在MySQL中创建一个函数,该函数将根据字段中是否存在特定字符串返回一个值。我的select语句最终需要进行多次评估,所以我想创建一个函数来提高效率。这是我的代码:

create function [dbname].id_datasource
(descval varchar(100))
returns varchar(10)  
begin  
        declare datasource varchar(10) default ''  
        select datasource =   
            case when descval like 'CLT%' or descval like '%CLT%' then 'CLT'  
            when descval like 'PCB%' or descval like '%PCB%' then 'PCB'  
            else 'NA' end   
        return (datasource)  
end  

我得到了这个错误:

SQL错误[1064][42000]:您的SQL语法有错误;查看与您的MySQL服务器版本对应的手册,以了解可在“选择数据源”附近使用的正确语法= 第6行类似于'CLT%'的descval或类似于'%CLT%'th'的descval时的情况

注意:它要求我为我的函数输入一个db名称前缀——如果没有它,它会返回“no database selected”——我确实用上面的[dbname]替换了我的长数据库名称。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/128957
 
1311 次点击  
文章 [ 1 ]  |  最新文章 3 年前
Barmar
Reply   •   1 楼
Barmar    3 年前

您有语法问题:

  1. 丢失的 ; 在每句话的结尾。
  2. 使用 SET 分配一个变量。
DELIMITER $$

create function [dbname].id_datasource (descval varchar(100))
returns varchar(10)
begin  
        declare datasource varchar(10) default '';
        SET datasource =   
            case 
                when descval like '%CLT%' then 'CLT'  
                when descval like '%PCB%' then 'PCB'  
                else 'NA' 
            end; 
        return datasource;
end
$$

DELIMITER ;

没有必要两者兼得 LIKE 'CLT%' LIKE '%CLT%' 因为任何匹配的 CLT% 也会匹配 %CLT% .