繁体   English   中英

使用 SQL 服务器查询获取特定列的第一个和最后一个数字之间的内容,包括第一个和最后一个数字

[英]Get content between first and last digit of a particular column using SQL Server query including first and last digit

我想使用 SQL 服务器查询查找特定列的第一位和最后一位之间的内容。 这也应该包括列的第一个和最后一个数字。

此处显示的示例:

  1. 塑料瓶 250ml x 24 散装灰尘 --- 250ml x 24
  2. 塑料瓶 250ml x 6 x 4 Sportscap --- 250ml x 6 x 4
  3. 塑料瓶 300ml x 24 --- 300ml x 24

这些都是不同的列值:

Plastic Bottle 250ml x 24 Loosepack Dust
Plastic Bottles 300ml x 24
Cans 500ml x 24
Plastic Bottles 250ml x 24
Glass 355ml x 6 x 4
Pail 5L x 1
Cans 163ml x 24
Glass 750ml x 6
Medium Plastic Jars 400g x 12
Plastic Bottles 250ml x 6 x 4 Sportscap
Plastic Bottles 1.25L x 4 x 3
Cans 250ml x 15
Cans 355ml x 24
Cans 330ml x 4 x 6
Plastic Bottles 1L x 4
Cans 200ml x 6 x 4 Slimline
Plastic Bottles 2L x 6
Large Plastic Jars 560g x 12
Plastic Bottles 1.5L x 6
Packet 85g x 12
Plastic Bottles 5L x 3
Glass 290ml x 15
Plastic Bottles 600ml x 4 x 3
Cans 375ml x 24 Multipack Cube
Cans 330mL x 6 x 4pk Sleek
Plastic Bottles 585g x 12
Plastic Bottles 1L x 6 x 2
Glass 300ML x 15
Glass 275ml x 10 x 3
Glass 300ml x 24
Cans 375ml x 20 Slab
Plastic Bottles 250ml x 4 x 6
Glass 330ml x 24
Party Packs
Glass 340ml x 4 x 6
Bag-in-Box 15L x 1
Packet 85g x 4 x 18 Multipack
Plastic Bottles 2L x 8
Glass 325ml x 12
Glass Jar 380g x 12
Bags 1.26KG X 6
Drum 220kg x 1
Pouch 118ML X 8PK X 2
Glass 275ml x 15
Cans 250ml x 12 x 2
Plastic Bottles 600ml x 6 x 4
Cans 375ml x 24 Cube
Cans 250ml x 6 x 4 Slimline
Glass Jar 340g x 12
Cans 250ml x 12
Plastic Bottles 500ml x 8
Plastic Bottles 375ml x 12
Cans 946ml x 12
Glass 1L x 6
Glass 315ml x 4 x 6
Tetrapack 500ml x 8
Cans 375ml x 12 x 2
SACHET 42G X 10 X 6
Plastic Bottles 250ml x 6 x 4
Plastic Bottles 350ml x 6
Plastic Bottles 1.25L x 12
Plastic Bottles 300ml x 12
Glass 585g x 12
Cans 375ml x 12 Multipack
Glass 200ml x 24
Cans 250ml x 24 Slimline
Half Pallet
Plastic Bottles 2L x 108
Tetrapack 250ml x 24
Plastic Bottles 150ml x 6 x 4 Sportscap
Glass 300ML X 12
Cans 285ml x 24
Plastic Bottles 220g x 12
Cans 500ml x 12 x 2
Glass 330ml x 6 x 4
Cans 375ml x 30 Cube
Glass 340ml x 24
Cans 330ml x 24 cube
Glass 750ml x 8
Glass Jar 450g x 12
Plastic Bottles 48ml x 12
Plastic Bottles 1.25L x 6
Cans 680g x 12
Glass 330ml x 12
Plastic Bottles 500ml x 12
Packet 2kg x 6
Plastic Bottles 1.5L x 8
Cans 330ml x 8
Large Plastic Jars 560g x 6
Plastic Bottles 1L x 4 x 2
Cans 250ml x 6 x 4
Other
Plastic Bottles 330ml x 24
Glass 700ml x 12
Plastic Bottles 3L x 4
Point of Sale
Pail 2.5kg x 6
Plastic Bottles 400ml x 12
Plastic Bottles 500ml x 18
Cans 440ml x 6 x 4
Plastic Bottles 400g x 2 x 8
Plastic Bottles 500ml x 24 Sportscap
Cans 375ml x 36 Cube
Cans 250ml x 12 Squat
Cans 355ml x 4pk x 6 sleek
Cans 300ml x 4 x 6 Slimline
Plastic Bottles 400g x 12
Plastic Bottles 600ml x 18
Extra Large Plastic Jars 1.75kg x 6
Tetrapack 250ml x 6 x 4
Cans 330ml x 10 x 3
Plastic Bottles 4L x 3

只是使用patindex()CROSS APPY计算 position 值的选项

例子

Declare @YourTable Table ([SomeCol] varchar(50))  Insert Into @YourTable Values 
 ('Plastic Bottle 250ml x 24 Loosepack Dust')
,('Plastic Bottles 250ml x 6 x 4 Sportscap')
,('Plastic Bottles 300ml x 24')
,('No Numbers')
,('Only 1 Number')
 
Select A.SomeCol 
      ,NewVal = substring(SomeCol,P1,len(SomeCol)-P2-P1+1)
 From @YourTable A
 Cross Apply ( values ( nullif(patindex('%[0-9]%',SomeCol),0)
                       ,patindex('%[0-9]%',reverse(SomeCol))-1
                      ) 
             ) B(P1,P2)

结果

SomeCol                                     NewVal
Plastic Bottle 250ml x 24 Loosepack Dust    250ml x 24
Plastic Bottles 250ml x 6 x 4 Sportscap     250ml x 6 x 4
Plastic Bottles 300ml x 24                  300ml x 24
No Numbers                                  NULL
Only 1 Number                               1

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM