【问题标题】:RegEx in SQL Server 2000SQL Server 2000 中的正则表达式
【发布时间】:2013-07-26 13:13:46
【问题描述】:

我有一张大表,里面有近 300 万条 IT 产品记录。

显示器/笔记本电脑的屏幕尺寸以各种方式描述。喜欢...

17in
17.3-TFT
17.3TFT
12.1-inch
15"

我想要上面的格式

17in
17.3in TFT
17.3in TFT
12.1in
15in

请建议我使用(RegEx 首选)的更新查询,因为也可以有组合..

我的数据其实如下

Hp EliteBook 8770w Core i5-3360m / 4GB 500GB 17.3-TFT Win7 Pro + Docking Station                   
Hp EliteBook 8770w Core i7-3630QM / 8GB 750GB 17.3TFT Blu-ray W8Pro/W7Pro + MON:23i                
10.1" Glos 1024x600 ledbubrsb2led Bottom Under Bottom Right                                         
10.1in Neoprene Sleeve Black (fits Up To 10.1-inch Mini Notebook)                                   
12.1" Matte 1024x768 Ccfl 1LCD For Lenovo                                                           
12.1-inch Antiglare Display                                    

我可以使用以下 SQL 选择它们。

select * from rprd   
where 
dsc like'%[0-9][0-9].[0-9]TFT%' collate sql_latin1_general_cp1_cs_as or
dsc like'%[0-9][0-9].[0-9][^A-Za-z0-9]TFT%' collate sql_latin1_general_cp1_cs_as or
dsc like'%[0-9][0-9].[0-9][^A-Za-z0-9]inch%' collate sql_latin1_general_cp1_cs_as or
dsc like'%[0-9][0-9].[0-9][^A-Za-z0-9]"%' collate sql_latin1_general_cp1_cs_as or
dsc like'%[0-9][0-9].[0-9]"%' collate sql_latin1_general_cp1_cs_as

我需要一种方法来更新那些

【问题讨论】:

    标签: sql replace sql-update sql-server-2000


    【解决方案1】:

    试试这个:

    SELECT substring(a, 0, LEN(a) - PatIndex('%[0-9]%', REVERSE(a)) + 2 ) + 
           CASE WHEN PatIndex('%TFT%', a) > 0 THEN 'in TFT'
                ELSE 'in'
           END    
    FROM test;
    

    demo

    更新:

    UPDATE test SET a = (substring(a, 0, LEN(a) - PatIndex('%[0-9]%', REVERSE(a)) + 2 ) + 
               CASE WHEN PatIndex('%TFT%', a) > 0 THEN 'in TFT'
                    ELSE 'in'
               END )
    

    它不仅是一个数字,而且非常复杂。也许你可以使用(为每种类型创建条件):

    SELECT CASE WHEN PatIndex('%[0-9][0-9].[0-9]-TFT%', a) > 0 THEN replace(a, '-TFT', 'in TFT')
                WHEN PatIndex('%[0-9][0-9].[0-9]TFT%', a) > 0 THEN replace(a, 'TFT', 'in TFT')
                WHEN PatIndex('%[0-9][0-9].[0-9]-inch%', a) > 0 THEN replace(a, '-inch', 'in')
                WHEN PatIndex('%[0-9][0-9].[0-9]-in%', a) > 0 THEN replace(a, '-in', 'in')
                WHEN PatIndex('%[0-9][0-9].[0-9]"%', a) > 0 THEN replace(a, '"', 'in')
                else a
           end
    from test
    

    demo2

    或者这可能会有所帮助:Regular Expressions in T-SQL on SQL Server 2000

    【讨论】:

    • 我在这里遇到了问题
    • 这是不同的问题!
    猜你喜欢
    • 2012-11-06
    • 1970-01-01
    • 2010-12-30
    • 2010-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多