MySQL 之间使用替换

Posted

技术标签:

【中文标题】MySQL 之间使用替换【英文标题】:MySQL Between by using replace 【发布时间】:2018-04-01 21:11:01 【问题描述】:

我有两张桌子

组 用户

组表有

身份证 年龄(这是范围。23,40)表示 23 到 40 性别

用户表有

身份证 年龄 性别

我想检查用户的年龄是否对其性别组有效 我现在写了这个查询

Select user.id, group.id as 'GroupID', Replace(group.age, ',', ' and '),
if (user.age between Replace(group.age, ',', ' and '), 'Valid', 'Invalid')
from user inner join group on group.gender = user.gender

这会在 if (user.age between , Replace(group.age, ',', ' and '), 'Valid', 'Invalid') 子句上生成查询错误

但如果我将其运行为

Select user.id, group.id as 'GroupID', Replace(group.age, ',', ' and ')
from user inner join group on group.gender = user.gender

这运行良好并产生像 1 | 1 | 20 和 40

为什么这个替换在 between 子句中不起作用 有没有其他方法可以检查值是否在逗号分隔的列值之间?

【问题讨论】:

【参考方案1】:
select 
user.id, 
group.id as 'GroupID', 
replace(group.age, ',', ' and '),
if (user.age >= CAST(SUBSTRING(group.age, 1, 2) AS UNSIGNED) and user.age <= CAST(SUBSTRING(group.age, 4, 2) AS UNSIGNED), 'Valid', 'Invalid')
from user 
inner join group 
on group.gender = user.gender

【讨论】:

语法错误,如果gender.age 值为10,20 且user.age 为15,这是否可行?我猜不是,我需要检查 15 是否在 10 到 20 之间 是的,实际上是语法错误,我现在明白了,因为 replace(group.age, ',', ' and ') 仍然会返回一个字符串,我猜 user.age 字段是整数。我正在考虑一个更好的解决方案,并将编辑查询。 我改了,如果没问题请告诉我。如果 group age 中的值随时小于 10 或大于 99,则需要更通用的方法,因为此 SUBSTRING 函数始终采用两个字符。您还需要检查确切的数据类型user.age 字段,并且必须在 CAST 中使用(我用 UNSIGNED 整数类型编写) 谢谢,这个有2位数年龄的限制,100呢?我用 user.age >= LEFT(group.age, LOCATE(',',group.age) - 1)

以上是关于MySQL 之间使用替换的主要内容,如果未能解决你的问题,请参考以下文章

MySQL - 替换 LEFT JOIN 代替 NOT IN

几个CSV大文件如何导入mysql数据库,并更新替换对应数据?

用其他东西替换或删除新行,但只能在 CSV 文件上使用 PHP 的单引号或双引号之间

MySQL字符串的拼接截取替换查找位置

MySQL字符串的拼接截取替换查找位置

mysql中如何进行模糊替换