【问题标题】:Linking tables based on a numeric char value within a larger char field基于较大 char 字段中的数字 char 值链接表
【发布时间】:2014-12-23 14:32:01
【问题描述】:

基本上我想做以下事情:

select * from thistable
inner join thattable on thistable.invoicenumber = thattable.commentsandsuch

但是,“invoicenumber”字段包含在“commentandsuch”中,从每个记录不同的字符位置开始,因此我无法使用如下表达式加入表格(其中“invoicenumber”始终是最后一个“cmetsandsuch”的5个字符):

right(rtrim(commentsandsuch), 5)

有没有一种方法可以连接两个表,其中一个表的 char 字段值包含在另一个表的 char 字段值中的某个位置?

任何帮助将不胜感激! :)

编辑:

以下是一些示例数据:

invoicenumber:                   commentsandsuch:
012345                           Reg:  021 Inv:012345 Cus:1234    Br:AZ Stk:THISPARTNUMBER123
123456                           Reg:  1123 Inv:123456 Cus:4789    Br:BY Stk:ANOTHERPARTNUMBER5
234567                           Reg:  74 Inv:234567 Cus:5274    Br:HH Stk:WOOTONEMOREPART0     

【问题讨论】:

  • 在两个表中显示一些示例数据
  • 我建议您先更改数据模型。通过一些正则表达式函数传递CommentAndSuch 列,以将发票编号提取到它自己的列中。在另一个字符串中搜索连接非常慢。
  • 我添加了一些示例数据@NoDisplayName,希望这会有所帮助!

标签: sql-server-2008 char inner-join


【解决方案1】:

可能是Join on Like condition 应该对您有所帮助,但是查询可能变得不可搜索

SELECT *
FROM   thistable
INNER JOIN thattable
ON thattable.commentsandsuch LIKE '%' + CONVERT(VARCHAR(50), thistable.invoicenumber) + '%' 

【讨论】:

  • 我试过你的例子,它似乎完全符合我的要求!感谢您的所有帮助@nodisplayname!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-21
  • 1970-01-01
  • 2023-03-21
  • 1970-01-01
相关资源
最近更新 更多