sql >> Database >  >> RDS >> Sqlserver

Gegevens splitsen in SQL Server String

Deze functie helpt je strings te splitsen:

CREATE function dbo.split(@value varchar(8000),@delim varchar(8000))
returns table
as
return
(
select d.value,
       d.orders,
       ivalue = convert(int, case when isnumeric(d.value)=1 and d.value not like '%[^0-9 +-]%' and len(replace(replace(replace(d.value,' ',''),'-',''),'+',''))<=10 then case when convert(bigint,d.value) between -2147483648 and 2147483647 then d.value end end)

    from
        (
            select   
                    value= replace(substring(value,
                                            idx,
                                            case when cnt>=0 then cnt end /* case для защиты от нехороших планов, когда сначала идет вычисление substring, а потом ограничивающее where по s_value.number between */
                                         )
                                 ,char(1),'')
                    ,orders=( datalength(left(value,idx-1))-datalength(replace(left(value,idx-1),@delim,''))
                            )/datalength(@delim)
                from (
                       select number
                             ,idx
                             ,cnt = charindex(@delim,value, number + 1) - number - datalength(@delim)
                             ,value 
                          from 
                                (
                                   select number
                                         ,idx = number + datalength(@delim)
                                         ,value = (select @delim+char(1)[email protected]+char(1)[email protected])
                                      from dbo.s_value
                                        where number between 1 and datalength( (select @delim+char(1)[email protected]+char(1)[email protected]) ) - datalength(@delim)

                                ) t            
                          where substring(t.value, number, datalength(@delim)) = @delim         
                     ) t             
       ) d          
)


GO



  1. Fout bij het importeren van oracle jdbc7-stuurprogramma met Maven

  2. Een rij van de ene tabel naar de andere verplaatsen (Invoegen lijst met waarden komt niet overeen met kolomlijst)

  3. Is het mogelijk om twee kolommen in dezelfde zoekopdracht te tellen?

  4. MySQL maandelijkse verkoop van de afgelopen 12 maanden inclusief maanden zonder verkoop