Mysql 如何从varchar字段中提取ID并加入另一个表?

Mysql 如何从varchar字段中提取ID并加入另一个表?,mysql,sql,regex,Mysql,Sql,Regex,我有一个名为“click_target”的字段,该字段存储类似以下内容的数据字符串: http://domain.com/deals/244?utm_source=sendgrid.com&utm_medium=email&utm_campaign=website 使用MySQL查询,是否可以从字符串中提取ID(244)并使用它连接另一个表?这是一个难看的黑客行为,但我相信这行代码将在上面的url中为您提取ID REVERSE(LEFT(LOCATE('/', REVERSE(LEFT(clic

我有一个名为“click_target”的字段,该字段存储类似以下内容的数据字符串:

http://domain.com/deals/244?utm_source=sendgrid.com&utm_medium=email&utm_campaign=website


使用MySQL查询,是否可以从字符串中提取ID(244)并使用它连接另一个表?

这是一个难看的黑客行为,但我相信这行代码将在上面的url中为您提取ID

REVERSE(LEFT(LOCATE('/', REVERSE(LEFT(click_target, LOCATE('?', click_target)-1)))-1))

基本上,我得到的文本介于第一个“?”和最后一个“/”之间。从那里你可以用这个值加入任何你想要的表,尽管我建议使用别名或将其存储在变量中,这样就不会经常重新计算。

您当然可以使用表达式玩游戏,将ID从该字符串中提取出来,但我有一个更大的担忧-您正在将对URL格式的依赖性烧制到数据库中的查询中。这不是一个好主意,因为当(我不说是否)URL更改时,您的查询会突然悄无声息地失败-没有错误,只有空的(如果您幸运的话)或无意义的结果。

如果您需要id,请修复数据库,将其存储在单独的字段中。

遗憾的是,MySQL对正则表达式的子字符串处理非常糟糕。我可以建议添加一个仅包含ID的字段吗?