【问题标题】:Get a specific string获取特定字符串
【发布时间】:2017-09-12 07:40:11
【问题描述】:

这是我的数据,每条ThroughRouteSid 记录都有相同的模式。 六个数字和五个逗号。然后我只想得到三个和五个 编号为模板表的两条记录并获得相同的Count() 这两条记录的价值。

例如:图片中的第一个记录。

ThroughRouteSid(3730,2428,2428,3935,3935,3938,) Count(32)

我想要这样的结果: 2428 32 3935 32 我得到我想要的数字。成为两条记录,并且在模板表中都有相同的计数值

【问题讨论】:

  • 不要将数据存储为逗号分隔的项目,这只会给您带来很多麻烦。
  • 我不得不处理一次单元格中的逗号分隔值,因为它们是我们的外键 ID,所以压力很大
  • 您使用的是哪个 DBMS? (MySQL、Oracle、Postgres ……?)
  • @kenfire 在标签中说
  • 请问当我将数据存储为逗号分隔项时可能会出现什么样的问题?

标签: sql sql-server c#-4.0


【解决方案1】:

您可以使用 XML 来获取结果,请参考下面的示例代码 -

create table #t1( ThroughRouteSid varchar(500) , Cnt int)

insert into #t1
select '3730,2428,2428,3935,3935,3938,' , len('3730,2428,2428,3935,3935,3938,')
union all select '1111,2222,3333,4444,5555,6666,' , len('1111,2222,3333,4444,5555,6666,')

select   cast( '<xml><td>' + REPLACE( SUBSTRING(ThroughRouteSid ,1 , len(ThroughRouteSid)-1),',','</td><td>') + '</td></xml>' as xml) XmlData , Cnt 
into #t2  from #t1

select XmlData.value('(xml/td)[3]' ,'int' ), Cnt ,XmlData.value('(xml/td)[5]' ,'int' ), Cnt 
  from #t2

【讨论】:

    【解决方案2】:

    首先创建引用How to Split a string by delimited char in SQL Server 的函数。然后尝试查询以下内容

    select (SELECT CONVERT(varchar,splitdata) + ' '+ Convert(varchar, [Count])+' ' FROM (select splitdata, ROW_NUMBER() over (ORDER BY (SELECT 100)) row_no 
    from [dbo].[fnSplitString](ThroughRouteSid,',')
    where splitdata != '') as temp where row_no in (2,5)
    for xml path('')) as col1 from [yourtable]
    

    【讨论】:

      【解决方案3】:

      如果您使用的是 SQL Server 2016,您可以执行以下操作:

      create table #temp (ThroughRouteSid varchar(1024),[Count] int)
      insert into #temp values
      ('3730,2428,2428,3935,3935,3938,',32),
      ('730,428,428,335,935,938,',28)
      
      select 
        spt.value,
        t.[Count]
      from #temp t
      cross apply (
          select value from STRING_SPLIT(t.ThroughRouteSid,',') where LEN(value) > 0
      )spt
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-11-20
        • 2017-07-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多