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数据库,并更新替换对应数据?