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)
,对于任何与ProductClean或ProductRaw JOIN你可以使用这个观点。索引视图会给你更好的表现。而且,如果需要,您可以在任何列上创建非聚集索引。