Hier ist eine Funktion zum Aufteilen einer Zeichenfolge in Zeilen. Darunter befindet sich eine Abfrage für Ihre Demorecords-Tabelle, die die Funktion verwendet, um das angeforderte Ergebnis zu erhalten.
create function dbo.split
(
@delimited nvarchar(max),
@delimiter nvarchar(5)
)
returns @rows table
(
rownumber int not null identity(1,1),
value nvarchar(max) not null
)
as
begin
if @delimited is null return
declare @delr_len int = len(@delimiter)
declare @start_at int = 1
declare @end_at int
declare @deld_len int
while 1=1
begin
set @end_at = charindex(@delimiter,@delimited,@start_at)
set @deld_len = case @end_at when 0 then len(@delimited) else @[email protected]_at end
insert into @rows (value) values(substring(@delimited,@start_at,@deld_len));
if @end_at = 0 break;
set @start_at = @end_at + @delr_len
end
return
end
go
select custid, customername, currencycode=currencycode.value, currentbalance=currentbalance.value, datevalue=datevalue.value
from demorecords r
cross apply (select rownumber, value from dbo.split(r.currencycode,'ý')) currencycode
cross apply (select rownumber, value from dbo.split(r.currentbalance,'ý') where rownumber = currencycode.rownumber) currentbalance
cross apply (select rownumber, value from dbo.split(r.datevalue,'ý') where rownumber = currencycode.rownumber) datevalue
Wenn Sie eine Spalte, die fehlende Werte enthalten können, verwenden Sie eine äußere Anwendung anstelle eines inneren gelten für diese Spalte das Ergebnis der Funktion zu verbinden. Im folgenden Beispiel wird die DatWert Spaltenwert fehlt 3 und den Wert 4.
INSERT INTO DemoRecords VALUES ('Mr. X', 'BDTýUSDýGBPýEUR','10500ý2500ý1050ý','ý')
select custid, customername, currencycode=currencycode.value, currentbalance=currentbalance.value, datevalue=datevalue.value
from demorecords r
cross apply (select rownumber, value from dbo.split(r.currencycode,'ý')) currencycode
cross apply (select rownumber, value from dbo.split(r.currentbalance,'ý') where rownumber = currencycode.rownumber) currentbalance
outer apply (select rownumber, value from dbo.split(r.datevalue,'ý') where rownumber = currencycode.rownumber) datevalue
Alternativ können Sie Ihre Eingabe nicht fehlen Werte aufzuräumen. Im obigen Beispiel würde ich erwarten, dass DateValue "nicht" ist. Wenn es Ihre Situation erlaubt, möchten Sie diese möglicherweise finden und beheben, ohne einen äußeren Join zu verwenden.
Sie können eine einfache Schleife schreiben, um die Bits herauszuziehen, die Ihnen wichtig sind, und sie in Ihre Datenbank einfügen. –
Hinweis: Auch nach dem Teilen der Werte müssen Sie den DateValue immer noch in einen tatsächlichen Datums-Datentyp umwandeln. –
Könntest du bitte ein bisschen mehr erklären, weil ich total verwirrt bin :( –