sql - SQL 连接帮助所需的字段类型与持续时间信息不匹配
问题描述
我正在尝试使用 SQL 连接两个表。我希望将表 2 中的成本添加到表 1。过去的成本仅因服务而异,因此它是一个简单的连接,但数据已更改,现在成本也因位置和持续时间而异。
我可以根据位置而不是持续时间进行链接。表 1 中的持续时间存储为整数。在表 2 中,持续时间以“xx-xxxx”格式存储为文本范围。我尝试使用 substring/left 和 patindex 隔离新字段中的最小持续时间和最大持续时间。(我正在使用通过 dbeaver 访问的缓存数据库并且无法使用 charindex)。
我能够提取最小持续时间作为“-”字符之前的文本,但无法提取最大持续时间,即使我有它,我也不知道如何加入表格。请帮忙!另外由于正在使用数据库,我此时只能编写选择语句,不能创建/编辑表。谢谢!
表格1:
表 2:
期望的输出:
解决方案
这是一个糟糕的设计。您不应该将数字范围存储为字符串。相反,您应该在两个不同的列中设置上限和下限。
您的数据存储方式,您需要拆分字符串并将每个部分转换为数字,您可以与第一个表中的值进行比较。所以:
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)
推荐阅读
- c# - Visual Studio 总是使用 Paket 重建解决方案
- python - 查找重复项并标记为变体
- spring - 在 WebFlux 中处理端点注释的控制器拦截器
- sql-server - 从任务计划程序运行时出现程序错误,但在手动运行时完成
- html - 如何使用 html 和 css 绘制带箭头的虚线,如下所示
- html - 如何在不使用 Bootstrap 的情况下使 HTML 表单输入字段响应
- swift - 在 CGContext 中重新创建 UIImageView 的 CGAffineTransform
- azure - Azure Functions TimerTrigger 在运行数小时后重新启动
- c - C中的文件输入
- powerbi - 在选择单个切片器之前不显示卡片值