Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如果逗号获得子字符串,则返回整个字符串_Mysql_Sql_Pdo_Substring - Fatal编程技术网

Mysql 如果逗号获得子字符串,则返回整个字符串

Mysql 如果逗号获得子字符串,则返回整个字符串,mysql,sql,pdo,substring,Mysql,Sql,Pdo,Substring,如果存在逗号,我将如何提取一个SUNSTRING,或者如果没有找到逗号,我将如何返回整个字符串 例如: 640 => 640 310,321,450 => 310 1024,5,78, 900 => 1024 我正在考虑这样做:(假设这个字符串位于名为author\u id的表行中) 但这显然是行不通的 谢谢 其他信息: 大约有10%的“作者id”有一个以上的作者,因此a.author\u id=b.author\u id工作正常,但当有多个作者时有”或null。这里有两种方

如果存在
逗号
,我将如何提取一个SUNSTRING,或者如果没有找到
逗号
,我将如何返回整个字符串

例如:

640 => 640
310,321,450 => 310
1024,5,78, 900 => 1024
我正在考虑这样做:(假设这个字符串位于名为
author\u id
的表行中)

但这显然是行不通的

谢谢

其他信息:

大约有10%的“作者id”有一个以上的作者,因此
a.author\u id=b.author\u id
工作正常,但当有多个作者时有
null

这里有两种方法:

select substring_index(val, ',', 1)

第一个在第一个逗号之前获取所有内容。第二个将字符串转换为数字。将忽略第一个非数字字符(例如“,”)之后的所有字符

看起来您正在以逗号分隔的字符串存储数字列表。这是个坏主意。你可能应该考虑使用一个结点表,而不是把数字作为字符串和列表存储在一个字符串中而不是一个表中。

这里有两种方法:

select substring_index(val, ',', 1)

第一个在第一个逗号之前获取所有内容。第二个将字符串转换为数字。将忽略第一个非数字字符(例如“,”)之后的所有字符

看起来您正在以逗号分隔的字符串存储数字列表。这是个坏主意。您可能应该考虑使用连接表,而不是将字符串作为字符串和列表存储在列表中,而不是表中。 SQL FIDDLE:


SQL FIDLE:

从my_表中选择子字符串_索引(my_列“,”,”,1)
现在看规范化。这就是为什么大家都在谈论规范化数据库的原因。google又坏了吗?
从my_表中选择SUBSTRING_索引(my_列“,”,”,1)现在看规范化。我亲爱的学生们,这就是为什么大家都在谈论规范化数据库的原因。谷歌又坏了吗?是的,选项二是不可靠的。我试试看。是的,第二种选择是不可靠的。我试试看。
select val + 0
SELECT CASE 
       WHEN author_ids LIKE '%,%'
       THEN SUBSTRING_INDEX(author_ids, ',', 1)
       ELSE author_ids
       END AS author_ids
FROM yourtable