首页 > 解决方案 > SQL 连接帮助所需的字段类型与持续时间信息不匹配

问题描述

我正在尝试使用 SQL 连接两个表。我希望将表 2 中的成本添加到表 1。过去的成本仅因服务而异,因此它是一个简单的连接,但数据已更改,现在成本也因位置和持续时间而异。

我可以根据位置而不是持续时间进行链接。表 1 中的持续时间存储为整数。在表 2 中,持续时间以“xx-xxxx”格式存储为文本范围。我尝试使用 substring/left 和 patindex 隔离新字段中的最小持续时间和最大持续时间。(我正在使用通过 dbeaver 访问的缓存数据库并且无法使用 charindex)。

我能够提取最小持续时间作为“-”字符之前的文本,但无法提取最大持续时间,即使我有它,我也不知道如何加入表格。请帮忙!另外由于正在使用数据库,我此时只能编写选择语句,不能创建/编辑表。谢谢!

表格1:

表格1

表 2:

表 2

期望的输出:

输出

标签: sqlstringinner-joindbeaver

解决方案


这是一个糟糕的设计。您不应该将数字范围存储为字符串。相反,您应该在两个不同的列中设置上限和下限。

您的数据存储方式,您需要拆分字符串并将每个部分转换为数字,您可以与第一个表中的值进行比较。所以:

select t1.*, t2.cost
from table1 t1
inner join table2 t2 
    on t2.duration between cast(substring(duration, 1, instr(duration, '-') - 1) as int) 
                       and cast(substring(duration, instr(duration, '-') + 1) as int)

推荐阅读