0

我有一张包含 IT 产品近 300 万条记录的大表。

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

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

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

4

1 回答 1

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;

演示

更新:

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

演示2

或者这可能会有所帮助:SQL Server 2000 上的 T-SQL 中的正则表达式

于 2013-07-26T10:42:59.920 回答