Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

SQL Server 2008 dzielony ciąg z pola w rekordzie

Użyj ZASTOSUJ KRZYŻOWY w połączeniu z dzielącym UDF. Rozdzielacz ciągów, którego używam w moim przykładzie, pochodzi z tutaj .

/* Create function for purposes of demo */
CREATE FUNCTION [dbo].[fnParseStringTSQL] (@string NVARCHAR(MAX),@separator NCHAR(1))
RETURNS @parsedString TABLE (string NVARCHAR(MAX))
AS 
BEGIN
   DECLARE @position int
   SET @position = 1
   SET @string = @string + @separator
   WHILE charindex(@separator,@string,@position) <> 0
      BEGIN
         INSERT into @parsedString
         SELECT substring(@string, @position, charindex(@separator,@string,@position) - @position)
         SET @position = charindex(@separator,@string,@position) + 1
      END
     RETURN
END
go

/* Set up sample data */
declare @t table (
    IR int,
    CR varchar(100)
)

insert into @t
    (IR, CR)
    select 1, '1,2' union all
    select 2, '3' union all
    select 3, '4,5,6'

/* Here's the query that solves the problem */
select t.IR, p.string
    from @t t
        cross apply [dbo].[fnParseStringTSQL](t.CR,',') p


/* clean up after demo */
drop function [dbo].[fnParseStringTSQL]



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL Server 2008:WYBIERZ DO AKTUALIZACJI

  2. Uzyskaj wartość zwracaną z procedury składowanej SQL za pomocą PHP

  3. Jak uzyskać wartości, które nie zawierają liczb w SQL Server?

  4. SQL:Wybierz kolumny tylko z wartościami NULL

  5. Pamięć podręczna bufora:co to jest i jak wpływa na wydajność bazy danych?