SQL查询,参加在操纵柱

问题描述:

我有以下的列结构和数据(仅1个为例)SQL查询,参加在操纵柱

[ProductRaw] [nvarchar](255) NULL 
One Kind of Product (CatA) 
Another Product (CatB) 
Yet Another Product (CatC) 

我不能在此列变化,由于其他的要求,但我也需要做数据库表在本专栏的干净版本上加入'连接'。干净的版本是这样的

[ProductClean] [nvarchar](255) NULL 
One Kind of Product 
Another Product 
Yet Another Product 

什么会在SQL Server中做到这一点的最好办法是什么?我知道它可以使用以下内容完成

DECLARE @Sql varchar(50) = 'One Kind of Product (CatA)'  

SELECT 
    PARSENAME(REPLACE(@sql,' (','.'),2) 

是否有更好的方法来做到这一点(例如计算列)?

您可以使用like

on ProductRaw like ProductClean + '%' 

但是,我的建议是修改表与计算列:

alter table t 
    add ProductClean as (left(ProductRaw, charindex(' (', ProductRaw + ' (') - 1))); 

然后你就可以在ProductClean添加一个索引,做一个更明智加入:

on t.ProductClean = ?.ProductClean 

我的建议是创建为eparate 索引视图与现有表的所有列和附加列命名ProductClean。现在

CREATE VIEW [P_RawWithClean] WITH SCHEMABINDING 
AS 

     SELECT * 
      , RTRIM(SUBSTRING([ProductRaw], 1, CHARINDEX('(', [ProductRaw] + '(') - 1)) AS [ProductClean] 
     FROM [YourTableName] 

CREATE UNIQUE CLUSTERED INDEX idx_RawWithClean ON P_RawWithClean(ProductClean) 

,对于任何与ProductCleanProductRaw JOIN你可以使用这个观点。索引视图会给你更好的表现。而且,如果需要,您可以在任何列上创建非聚集索引。