de-vraag
  • Pytania
  • Tagi
  • Użytkownicy
Powiadomienia
Nagrody
Rejestracja
Po zarejestrowaniu się, będziesz otrzymywać powiadomienia o odpowiedziach i komentarzach do swoich pytań.
Zaloguj się
Brak tłumaczeń pasujących do Twojego wyszukiwania Jeśli masz już konto, zaloguj się, aby sprawdzić nowe powiadomienia.
Za dodane pytania, odpowiedzi i komentarze przewidziane są nagrody.
Więcej
Źródło
Edytuj
 Gurru
Gurru
Question

Jak podzielić wartość rozdzieloną przecinkami na kolumny?

Mam taką tabelę

Value   String
-------------------
1       Cleo, Smith

Chcę rozdzielić ciąg z delimitowanym przecinkiem na dwie kolumny

Value  Name Surname
-------------------
1      Cleo   Smith

Potrzebuję tylko dwóch stałych dodatkowych kolumn

123 2012-05-14T10:40:38+00:00 3
 Charles
Charles
Edytowane pytanie 1. października 2013 в 9:32
Programowanie
csv
sql-server
sql-server-2008
Popular videos
Excel - Jak wyciągnąć fragment tekstu o różnej długości
Excel - Jak wyciągnąć fragment tekstu o różnej długości
3 lata temu
Jak kupować więcej złota. 3 metody na zwiększenie ilości złota w swoim sejfie.
Jak kupować więcej złota. 3 metody na zwiększenie ilości złota w swoim sejfie.
4 miesiące temu
Excel - Wartości z jednej kolumny do wielu czyli piwotowanie w Power Query [odc.847]
Excel - Wartości z jednej kolumny do wielu czyli piwotowanie w Power Query [odc.847]
2 lata temu
excel-633 - Jak rozdzielić tekst z 3 przecinkami na 2 kolumny
excel-633 - Jak rozdzielić tekst z 3 przecinkami na 2 kolumny
5 lat temu
excel-634 - Jak rozdzielić tekst z 3 przecinkami (bez spacji) na 2 kolumny
excel-634 - Jak rozdzielić tekst z 3 przecinkami (bez spacji) na 2 kolumny
5 lat temu
EXCEL - Rozdzielanie tekstów - "Tekst jako kolumny"
EXCEL - Rozdzielanie tekstów - "Tekst jako kolumny"
10 lat temu
excel-545 - Jak rozdzielić imię i nazwisko - formuła lub Tekst jako kolumny
excel-545 - Jak rozdzielić imię i nazwisko - formuła lub Tekst jako kolumny
6 lat temu
WORD - Wstawianie Kolumn i Zarządzanie Tekstem w Kolumnach | ForumWiedzy.pl | ForumWiedzy
WORD - Wstawianie Kolumn i Zarządzanie Tekstem w Kolumnach | ForumWiedzy.pl | ForumWiedzy
4 lata temu
Excel - Jak podzielić na wiersze (z jednej komórki do wielu wierszy) [odc.772]
Excel - Jak podzielić na wiersze (z jednej komórki do wielu wierszy) [odc.772]
4 lata temu
Excel - podstawy. Dzielenie tekstu na kilka kolumn.
Excel - podstawy. Dzielenie tekstu na kilka kolumn.
8 lat temu
PowerQuery #1 - Podział kolumny na wiersze
PowerQuery #1 - Podział kolumny na wiersze
5 lat temu
Excel#9 zamiana kropek na przecinki
Excel#9 zamiana kropek na przecinki
7 lat temu
MS Word 2007 - tworzenie kolumn
MS Word 2007 - tworzenie kolumn
6 lat temu
excel-161 - Import danych (txt, csv) 2/4 - rozdzielenie tekstu na kolumny
excel-161 - Import danych (txt, csv) 2/4 - rozdzielenie tekstu na kolumny
9 lat temu
« Poprzedni
Następny »
To pytanie ma 1 odpowiedź w języku angielskim, aby je przeczytać zaloguj się na swoje konto.
Romil  Kumar Jain
Romil Kumar Jain
14. maja 2012 в 10:43
2012-05-14T10:43:39+00:00
Więcej
Źródło
Edytuj
#16181172

Twój cel może być rozwiązany za pomocą następującego zapytania -

Select Value  , Substring(FullName, 1,Charindex(',', FullName)-1) as Name,
Substring(FullName, Charindex(',', FullName)+1, LEN(FullName)) as  Surname
from Table1

Nie ma gotowej funkcji Split w serwerze sql, więc musimy stworzyć funkcję zdefiniowaną przez użytkownika.

CREATE FUNCTION Split (
      @InputString                  VARCHAR(8000),
      @Delimiter                    VARCHAR(50)
)

RETURNS @Items TABLE (
      Item                          VARCHAR(8000)
)

AS
BEGIN
      IF @Delimiter = ' '
      BEGIN
            SET @Delimiter = ','
            SET @InputString = REPLACE(@InputString, ' ', @Delimiter)
      END

      IF (@Delimiter IS NULL OR @Delimiter = '')
            SET @Delimiter = ','

--INSERT INTO @Items VALUES (@Delimiter) -- Diagnostic
--INSERT INTO @Items VALUES (@InputString) -- Diagnostic

      DECLARE @Item           VARCHAR(8000)
      DECLARE @ItemList       VARCHAR(8000)
      DECLARE @DelimIndex     INT

      SET @ItemList = @InputString
      SET @DelimIndex = CHARINDEX(@Delimiter, @ItemList, 0)
      WHILE (@DelimIndex != 0)
      BEGIN
            SET @Item = SUBSTRING(@ItemList, 0, @DelimIndex)
            INSERT INTO @Items VALUES (@Item)

            -- Set @ItemList = @ItemList minus one less item
            SET @ItemList = SUBSTRING(@ItemList, @DelimIndex+1, LEN(@ItemList)[email protected])
            SET @DelimIndex = CHARINDEX(@Delimiter, @ItemList, 0)
      END -- End WHILE

      IF @Item IS NOT NULL -- At least one delimiter was encountered in @InputString
      BEGIN
            SET @Item = @ItemList
            INSERT INTO @Items VALUES (@Item)
      END

      -- No delimiters were encountered in @InputString, so just return @InputString
      ELSE INSERT INTO @Items VALUES (@InputString)

      RETURN

END -- End Function
GO

---- Set Permissions
--GRANT SELECT ON Split TO UserRole1
--GRANT SELECT ON Split TO UserRole2
--GO
 Noctis
Noctis
Edytowana odpowiedź 21. września 2016 в 10:31
123
0
 bvr
bvr
27. lutego 2013 в 9:30
2013-02-27T09:30:02+00:00
Więcej
Źródło
Edytuj
#16181174
;WITH Split_Names (Value,Name, xmlname)
AS
(
    SELECT Value,
    Name,
    CONVERT(XML,'<Names><name>'  
    + REPLACE(Name,',', '</name><name>') + '</name></Names>') AS xmlname
      FROM tblnames
)

 SELECT Value,      
 xmlname.value('/Names[1]/name[1]','varchar(100)') AS Name,    
 xmlname.value('/Names[1]/name[2]','varchar(100)') AS Surname
 FROM Split_Names

a także sprawdź poniższy link dla odniesienia

http://jahaines.blogspot.in/2009/06/converting-delimited-string-of-values.html

45
0
Michael Schnerring
Michael Schnerring
14. maja 2012 в 10:43
2012-05-14T10:43:56+00:00
Więcej
Źródło
Edytuj
#16181173

Rozwiązanie zawarte w SQL User Defined Function to Parse a Delimited String może okazać się pomocne (z The Code Project).

To jest fragment kodu z tej strony:

CREATE FUNCTION [fn_ParseText2Table]
  (@p_SourceText VARCHAR(MAX)
  ,@p_Delimeter VARCHAR(100)=',' --default to comma delimited.
  )
 RETURNS @retTable
  TABLE([Position] INT IDENTITY(1,1)
   ,[Int_Value] INT
   ,[Num_Value] NUMERIC(18,3)
   ,[Txt_Value] VARCHAR(MAX)
   ,[Date_value] DATETIME
   )
AS
/*
********************************************************************************
Purpose: Parse values from a delimited string
  & return the result as an indexed table
Copyright 1996, 1997, 2000, 2003 Clayton Groom (<A href="mailto:[email protected]">[email protected]</A>)
Posted to the public domain Aug, 2004
2003-06-17 Rewritten as SQL 2000 function.
 Reworked to allow for delimiters > 1 character in length
 and to convert Text values to numbers
2016-04-05 Added logic for date values based on "new" ISDATE() function, Updated to use XML approach, which is more efficient.
********************************************************************************
*/

BEGIN
 DECLARE @w_xml xml;
 SET @w_xml = N'<root><i>' + replace(@p_SourceText, @p_Delimeter,'</i><i>') + '</i></root>';

 INSERT INTO @retTable
     ([Int_Value]
    , [Num_Value]
    , [Txt_Value]
    , [Date_value]
     )
     SELECT CASE
       WHEN ISNUMERIC([i].value('.', 'VARCHAR(MAX)')) = 1
       THEN CAST(CAST([i].value('.', 'VARCHAR(MAX)') AS NUMERIC) AS INT)
      END AS [Int_Value]
    , CASE
       WHEN ISNUMERIC([i].value('.', 'VARCHAR(MAX)')) = 1
       THEN CAST([i].value('.', 'VARCHAR(MAX)') AS NUMERIC(18, 3))
      END AS [Num_Value]
    , [i].value('.', 'VARCHAR(MAX)') AS [txt_Value]
    , CASE
       WHEN ISDATE([i].value('.', 'VARCHAR(MAX)')) = 1
       THEN CAST([i].value('.', 'VARCHAR(MAX)') AS DATETIME)
      END AS [Num_Value]
     FROM @w_xml.nodes('//root/i') AS [Items]([i]);
 RETURN;
END;
GO
Tamas Rev
Tamas Rev
Edytowana odpowiedź 5. października 2017 в 1:10
3
0
Dodaj pytanie
Kategorie
Wszystkie
Technologia
Kultura / Rekreacja
Życie / Sztuka
Nauka
Profesjonalny
Biznes
Użytkownicy
Wszystkie
Nowy
Popularny
1
Jasur Fozilov
Zarejestrowany 10 godzin temu
2
Zuxriddin Muydinov
Zarejestrowany 1 dzień temu
3
Денис Анненский
Zarejestrowany 3 dni temu
4
365
Zarejestrowany 1 tydzień temu
5
True Image
Zarejestrowany 1 tydzień temu
DA
DE
EL
ES
FR
ID
IT
JA
KO
LT
NL
PL
PT
RU
SK
SL
TR
ZH
© de-vraag 2022
Źródło
stackoverflow.com
na podstawie licencji cc by-sa 3.0 z przypisaniem