我要如何与charindex结合查询?

时间:2019-03-04 14:31:15

标签: sql sql-server

select * From V_Product

orderNumber  | ProductCode                           | orderDate    | status

10100 | S18_1749,S18_2248,S18_4409,S24_3969 | 2003-01-06 |Shipped 
10101 | S18_2325,S18_2795,S24_1937,S24_2022 | 2003-01-09 |Shipped

--------------------------------------------------------------------

select *From  products 

productCode | productName | productLine | productScale

S10_1678 | 1969 Harley Davidson Ultimate Chopper | Motorcycles | 1:10
S10_1949 | 1952 Alpine Renault 1300 |Classic Cars | 1:10

-----------------------------join---------------------------------------

  select *From  products a inner join V_Product b 
  on( a.productCode = b.ProductCode or a.productCode = substring(b.ProductCode,CHARINDEX(',',b.ProductCode)+1,8)) 

我要如何使用charindex而不是仅将所有产品代码组合在一起?

2 个答案:

答案 0 :(得分:1)

修复您的数据模型!不要将内容列表存储在字符串中!这不是存储多个值的SQL方法。您应该有一张表格,每个订单号和产品代码一行。

有时我们会被别人的非常,非常,非常糟糕的设计决策所束缚。如果是这样,您可以使用like

select *
from  products p inner join
      V_Product vp
     on ',' + vp.productCode + ',' like '%,' + p.ProductCode + ',%';

无需将列与=进行比较; like会解决这个问题。

请注意,这是“分隔符安全的”。因此,如果您有两个产品代码S-100和S-1000,则不会混淆。

答案 1 :(得分:0)

您尝试过这样的事情吗?

SELECT * FROM products a
INNER JOIN V_Product b ON a.ProductCode = b.ProductCode OR b.ProductCode LIKE '%' + a.ProductCode + '%'