【问题标题】:SQL Server 'like' when joining tables (SQL Server 2012)连接表时 SQL Server 'like' (SQL Server 2012)
【发布时间】:2014-10-16 19:26:38
【问题描述】:

我需要连接来自两个不同数据库的两个表。一张表来自他们的飞行操作软件,名为“Trips”,列有“Trip Number”。我需要将其加入到包含其会计软件中发票的表格中,并带有“发票编号”列。

发票号码是:

  • 行程编号
  • CM + [行程编号]
  • [行程编号] + [a-Z]
  • [行程编号] + [a-Z] + [a-Z]
  • [行程编号] + [a-Z] + [a-Z] + [a-Z]
  • CM + [行程编号] + [a-Z]
  • CM + [行程编号] + [a-Z] + [a-Z]
  • CM + [行程编号] + [a-Z] + [a-Z] + [a-Z]

所以连接将是 [Invoice Number] = [Trip Number] OR [Invoice Number] = 'CM' + [Trip Number] OR [Invoice Number] = [Trip Number] + [a-Z] OR....

有没有更好、更简洁的方法来做到这一点?我不能使用 '%'+[Trip Number]+'%' 之类的 [Invoice Number],因为这将不仅仅包含上述匹配条件,例如它会将行程号 1000 与发票号 10001 匹配。有没有办法说 ~this~ + [a-Z] 集合中的 0-3 个字符?

【问题讨论】:

  • regex... 我会先从他们的数据中过滤/清除发票编号,然后将其与您的数据结合起来。
  • 为什么需要更简洁的方式?减少打字?您当前的版本准确地显示了发生的情况并且易于扩展。连接需要以任何方式进行索引/表扫描,因此一些额外的字符串比较不会影响性能。
  • @adrianm 你或多或少是对的。我原本想让以后看到它的人更容易阅读,但这是我格式化的一个功能。正确格式化后,我相信它很容易理解。

标签: sql sql-server sql-like


【解决方案1】:

你可以使用PATINDEX,你把这个添加到条件中

PATINDEX( [Trip Number]  + '[a-z][a-z][a-z]',  [Invoice Number] ) =1

【讨论】:

    猜你喜欢
    • 2016-03-25
    • 1970-01-01
    • 2014-03-16
    • 1970-01-01
    • 1970-01-01
    • 2012-01-31
    • 2016-02-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多