【问题标题】:Joining tables in SQL using substring [closed]使用子字符串在 SQL 中连接表 [关闭]
【发布时间】:2020-06-17 09:35:58
【问题描述】:

我正在研究 DB2。我有两张有数千行的表。以下是需要连接的列中的示例数据

表 1:

 tab1_col
 201020102012**
 201020102013**
 2010201022****
 2010201010****
 20112012201322

表 2:

 tab2_col
 20102010201245
 2010201020134*
 20102010222022
 2010201010****
 20112012201322
 50250035102058

两个表的行中有 14 个字符(数字和 * 的组合)。我想使用连接(可能是内部连接)实现的是,如果 根据上述示例数据,我希望填充表 2 的以下行:

 20102010201245
 20102010222022
 20112012201322

我尝试使用 SUBSTR 函数,但无法达到预期的结果。

【问题讨论】:

    标签: sql database db2


    【解决方案1】:

    我觉得你描述的是这个逻辑

    select . . . 
    from table1 t1 join
         table2 t2
         on t2.tab2_col not like '%*%' and
            t2.tab2_col like replace(t1.tab1_col, '*', '_');
    

    编辑:

    根据您的评论:

    select . . . 
    from table1 t1 join
         table2 t2
         on left(t2.tab2_col, 10) = left(t1.tab1_col, 10);
    

    【讨论】:

    • 如果表 1 中的前 10 位或更多数字与表 2 中的前 10 位或更多数字匹配,则应连接该表。
    • @ychaulagain 。 . .随后的数字无关紧要?
    • 上面的查询返回您指定的输出。使用此稍作修改的查询检查 dbfiddle example 链接。如果您有另一组输入数据未通过此查询正确处理,请提供这样的一组数据和所需的结果。
    • 因为在表 2 中总会有偶数个星号。第一个答案现在非常适合我。
    猜你喜欢
    • 2012-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-05
    • 2012-03-03
    • 1970-01-01
    • 2021-11-06
    • 1970-01-01
    相关资源
    最近更新 更多