查询给出#1305 - FUNCTION database-name.LEN不存在; 为什么?

Cre*_*ane 10 mysql

EDIT3 MySQL小提琴在这里.我做了这个例子MySQL,你可以看到实际的问题.虽然我期望Jamie Foxx, Christoph Waltz2 names结果中有更多.即使它的编写方式与它SQL正确返回名称的示例完全相同.:/

EDIT2 SQL小提琴在这里.这是一个更简单的版本,但逻辑就在那里.我需要让这个工作在MySQL小提琴中SQL.当我只SQLLENGTH和替换函数并LOCATE用PhpMyAdmin测试它时,它返回actors列的整个内容,而不仅仅是前两个名称.我现在更加困惑,因为LOCATE它应该等同于CHARINDEX.

EDIT1*呵呵,我只是觉得,无论是LENCHARINDEX在存在MySQL.我想我可以代替LEN使用LENGTH,但我不知道该怎么办与CHARINDEX使用我试过LOCATE,但结果不正确,它给的全部内容actors领域.对此有何见解?

另一个跟进我以前的问题.这应该是它的结束.我有部分查询使用len函数在SQL Fiddle上工作,但是一旦我将它实现到我的实际数据库中的最终查询中,我得到的函数就不存在错误.列出以下我认为相关的所有内容

MySQL查询

SELECT 
title,
director,
thumb,
LEFT(actors, LEN(actors) - CHARINDEX(', ', actors))AS '2 names' 
FROM test 
WHERE MATCH (title, director, actors) AGAINST ('arc*' IN BOOLEAN MODE)
Run Code Online (Sandbox Code Playgroud)

错误

#1305 - FUNCTION database-name.LEN does not exist
Run Code Online (Sandbox Code Playgroud)

建立

OS: MAC OSX
SERVER: MAMP
DB ACCESS: PhpMyAdmin
Run Code Online (Sandbox Code Playgroud)

SHOW CREATE TABLE测试

CREATE TABLE `test` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `title` varchar(255) NOT NULL,
 `director` varchar(255) NOT NULL,
 `actors` varchar(10000) NOT NULL DEFAULT 'Jamie Foxx, Christoph Waltz, Leonardo DiCaprio, Kerry Washington, Samuel L. Jackson',
 `summary` text NOT NULL,
 `cover` varchar(255) NOT NULL DEFAULT 'http://localhost:8888/assets/OBS/img/uploads/covers-thumb/django_thumb.jpg',
 `thumb` varchar(255) NOT NULL DEFAULT 'http://localhost:8888/assets/OBS/img/uploads/covers-bug/django1_cover.jpg',
 `trailer` varchar(255) NOT NULL DEFAULT 'fnaojlfdUbs',
 PRIMARY KEY (`id`),
 FULLTEXT KEY `myindex` (`title`,`director`,`actors`)
) ENGINE=MyISAM AUTO_INCREMENT=101 DEFAULT CHARSET=utf8
Run Code Online (Sandbox Code Playgroud)

我真的不明白为什么我会收到这个错误,因为该声明在SQL Fiddle上运行良好.如果您需要任何其他信息,请提出要求.感谢大家的阅读,并提前回复.

顺便说一下:它是由它造成的actors varchar(10000)吗?

M K*_*aid 13

MySQL没有内置的CHARINDEX()函数.相反,你可以使用相当于charindex的LOCATE,而不是LEN你可以使用LENGTH

SELECT 
title,
director,
thumb,
LEFT(actors, LENGTH(actors) - LOCATE(', ', actors))AS '2 names' 
FROM test 
WHERE MATCH (title, director, actors) AGAINST ('arc*' IN BOOLEAN MODE)
Run Code Online (Sandbox Code Playgroud)

请参阅小提琴演示

如果您只想显示两个演员名称,可以使用SUBSTRING_INDEX

SELECT 
title,
director,
thumb,
SUBSTRING_INDEX(actors, ',', 2) AS '2 names' 
FROM test 
WHERE MATCH (title, director, actors) AGAINST ('test*' IN BOOLEAN MODE)
Run Code Online (Sandbox Code Playgroud)

看第二小提琴演示