【发布时间】:2016-10-11 21:46:03
【问题描述】:
SQL Server 2012 - 我有一个视图(复杂的),其中一列需要去掉任何非数字的内容。以下工作到一定程度;
STUFF(dbo.campaign_tracking_clicks.tt_cpn, 1, PATINDEX('%[0-9]%', dbo.campaign_tracking_clicks.tt_cpn) - 1, '') AS emailerid
如果值的末尾有除数字以外的任何内容,我会收到错误消息。
我有一个标量值函数'
/****** Object: UserDefinedFunction [dbo].[KeepNumCharacters] Script Date: 10/11/2016 1:05:51 PM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER Function [dbo].[KeepNumCharacters](@Temp VarChar(100)) Returns VarChar(100)
AS
Begin
While PatIndex('%[^0-9]%', @Temp) > 0
Set @Temp = Stuff(@Temp, PatIndex('%[^0-9+]%', @Temp), 1, '')
Return @TEmp
End
我正在使用;
dbo.KeepNumCharacters(dbo.campaign_tracking_clicks.tt_cpn) AS emailerid
但是,执行需要很长时间。我已经搜索和搜索,但没有找到替代方案。
【问题讨论】:
-
听起来这个数据应该在它自己的字段中。
-
我没有那么奢侈。
-
你的表有多少行?
-
尝试查看估计的执行计划,它可能会提示缺失的索引对您的查询有帮助。
-
@dubstylee 索引将有助于检索行,但他的问题是
SELECT部分中的每一行由KeepNumCharacters处理,这不会从索引中受益.
标签: sql sql-server tsql sql-server-2012 stored-functions