Dziekuję.
Tak, tekst startowy to xml o datatype = text.
Przyjrzę się zatem tym funckjom - czy Twoim zdaniem będzie to łatwiejsze rozwiazanie?
Chciałym jednak już dokończyć opcję z klasycznym wyszukiwaniem - jest już blisko oczekiwanego efektu:
nie pojawiają sie błędy jednak jako error traktowana jest zbyt duża liczba dat, co w efekcie zwraca za małą liczbę danych - przykład poniżej.
Czy można jakoś zliberalizować przypisywanie jako error?
**
Funkcja poprzednia, zły format ale dobra skuteczność:**
1322062 44.10.05 5/17/2018 125 PM
1322062 30.01.41 0 49 5/16/2018 9
1322062 99.05.56 0 48 5/16/2018 9
1322062 13.FF.FF 0 47 5/16/2018 2
1322062 31.13.01 5/15/2018 449 AM
1322062 13.A3.D3 5 5/7/2018 506 AM
1322062 13.A3.D3 4 5/2/2018 655 AM
1322062 31.13.01 4/26/2018 1248 AM
1322062 10.99.40 4/23/2018 138 PM
1322062 54.14.00 4/23/2018 405 AM
1322111 13.64.a1 Uhr Oeffnungszeiten
1322277 01.06.18 **** CASE_SUMMARY:
1322277 13.B2.D2 0 01.06.2018 1120
1322277 13.B2.D2 9 01.06.2018 1120
1322277 13.B2.D2 8 01.06.2018 1144
1322277 13.B2.D2 7 01.06.2018 1123
1322277 13.B2.D2 6 01.06.2018 1133
1322277 13.B2.D2 5 01.06.2018 1125
1322485 44.01.1E 50 5/4/2018 1014
1322485 31.03.36 49 3/12/2018 816
**
Funkcja obecna, pięknie wyłuskuje ale dużo omija:**
1322062 44.10.05 5/17/2018 125 PM
1322062 30.01.41
1322062 99.05.56
1322062 13.FF.FF
1322062 31.13.01 5/15/2018 449 AM
1322062 13.A3.D3 5/7/2018 506 AM
1322062 13.A3.D3 5/2/2018 655 AM
1322062 31.13.01 4/26/2018 1248 AM
1322062 10.99.40 4/23/2018 138 PM
1322062 54.14.00 4/23/2018 405 AM
1322111 13.64.a1
1322277 01.06.18
1322277 13.B2.D2
1322277 13.B2.D2
1322277 13.B2.D2
1322277 13.B2.D2
1322277 13.B2.D2
1322277 13.B2.D2
1322485 44.01.1E
1322485 31.03.36
Jeszcze jedna rzecz, pattern musiałem trochę zmienić (spacja przed i po), dlatego zmieniłem wyszukiwanie z 8 na 9 znaków:
ALTER FUNCTION [dbo].[fParseALLToRows5]
(@text VARCHAR(max))
RETURNS @RtnValue TABLE
(
error VARCHAR(9) NOT NULL
,[TIME] VARCHAR(30) NOT NULL
)
AS
BEGIN
DECLARE @i AS INTEGER
DECLARE @error VARCHAR(100)
DECLARE @Time VARCHAR(300)
SET @i = patindex('% [0-9][0-9].. %',@text)
while @i>0
BEGIN
SET @error = SUBSTRING(@text,@i,9)
SET @Time = SUBSTRING(@text,@i-28,21)
SET @Time = CASE WHEN patindex('% [pa]m%',@Time) > 9 THEN
SUBSTRING(@Time,CASE WHEN charindex(' ',@Time)>9 THEN 1 ELSE charindex(' ',@Time)+1 END,patindex('% [pa]m%',@Time)-CASE WHEN charindex(' ',@Time)>9 THEN 0 ELSE charindex(' ',@Time) END+3)
ELSE
''
END
INSERT INTO @RtnValue VALUES (@error,@Time)
SET @text = STUFF(@text, patindex('% [0-9][0-9].. %',@text), 9, '')
SET @i = patindex('% [0-9][0-9].. %',@text)
END
RETURN
END