需要帮助从案例中删除功能



我有一个我创建脚本以在我们公司环境中选择数据的情况。在此过程中,我决定使用函数进行某种模式匹配和剥离字符的情况。

但是,我们的一位客户不想让我们将他们的数据放在本地环境中,因此我现在需要按摩脚本以便能够在其环境上运行 - 完全意味着我需要删除这些功能,我很难考虑如何移动东西来做。

函数调用的一个示例是:

SELECT ....
CASE WHEN Prp = 'Key Cabinet'
        AND SerialNumber IS NOT NULL
        AND dbo.fnRemoveNonNumericCharacters(SerialNumber) <> ''
     THEN dbo.fnRemoveNonNumericCharacters(SerialNumber)
....
INTO #EmpProperty
FROM ....

其中 Prp是包含属性类型的列,而 SerialNumber是包含序列号的列,但也是其他一些随机垃圾,因为数据输入很草率。

功能定义是:

WHILE PATINDEX('%[^0-9]%', @strText) > 0
BEGIN
    SET @strText = STUFF(@strText, PATINDEX('%[^0-9]%', @strText), 1, '')
END
RETURN @strText

其中 @strTextSerialNumber,我正在传递。

我可能会被困在分析瘫痪中,因为我只是不知道做到这一点的好方法。我不需要每付的解决方案,也许只是指我知道您知道会起作用的方向。让我知道您是否想要一些示例DDL/DML来处理东西。

示例'serialnumber'值: CA100 (Trash bins)T110101B。 还有许多其他类型的值,例如所有文本或所有数字,但是我们正在将其过滤掉。当前的图案匹配已经足够好。

所以我认为您的意思是您不能使用功能...所以,也许:

declare @table table (SomeCol varchar(4000))
insert into @table values
('1 ab2cdefghijk3lmnopqr4stuvwxyz5 6 !7@#$8%^&9*()-10_=11+[]{}12|;:13></14? 15'),
('CA100 (Trash bins), T110, 101B')
;with cte as (
    select top (100) 
    N=row_number() over (order by @@spid) from sys.all_columns),
Final as (
    select SomeCol, Col
    from @table
        cross apply (
            select (select X + ''
            from (select N, substring(SomeCol, N, 1) X 
                  from cte 
                  where N<=datalength(SomeCol)) [1]
            where X between '0' and '9'
            order by N
            for xml path(''))
        ) Z (Col)
    where Z.Col is not NULL
)
select 
    SomeCol
    ,cast(Col as varchar) CleanCol  --change this to BIGINT if it isn't too large
from Final

相关内容

  • 没有找到相关文章

最新更新