【问题标题】:Get content between first and last digit of a particular column using SQL Server query including first and last digit使用 SQL Server 查询获取特定列的第一个和最后一个数字之间的内容,包括第一个和最后一个数字
【发布时间】:2022-08-05 09:23:59
【问题描述】:

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

此处显示的示例:

  1. 塑料瓶 250ml x 24 散装防尘 --- 24
  2. 塑料瓶 250ml x 6 x 4 Sportscap --- 6 x 4
  3. 塑料瓶 300ml x 24 --- 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
    
  • 一种方法是将表转储到平面文件中,然后使用正则表达式提取所需的组件。 SQL Server 本身对正则表达式的支持很差,在这里使用其他字符串函数会很头疼。

标签: sql sql-server string


【解决方案1】:

只是一个使用patindex()CROSS APPY 来计算位置值的选项

例子

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

【讨论】:

  • 感谢约翰。但我的要求最近发生了变化。我们可以得到如下输出... 塑料瓶 250ml x 24 散装灰尘 --- 24 塑料瓶 250ml x 6 x 4 Sportscap --- 6 x 4 塑料瓶 300ml x 24 --- 24
猜你喜欢
  • 2018-10-20
  • 2021-06-23
  • 2019-05-06
  • 2016-10-20
  • 1970-01-01
  • 1970-01-01
  • 2018-04-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多