Mam kolumnę varchar w tabeli, która służy do przechowywania danych XML. Tak, wiem, że istnieje typ danych xml, który powinienem używać, ale myślę, że to było ustawione zanim typ danych xml był dostępny, więc varchar jest tym, co muszę teraz użyć. :)SQL Server xml parsowanie ciągów w polu varchar
Dane przechowywane wygląda podobnie do następującego:
<xml filename="100100_456_484351864768.zip"
event_dt="10/5/2009 11:42:52 AM">
<info user="TestUser" />
</xml>
muszę przeanalizować nazwę, aby uzyskać cyfry między dwoma podkreśleniami który w tym przypadku będzie „456”. Pierwsza część nazwy pliku "nie powinna" zmieniać długości, ale środkowa liczba będzie. Potrzebuję rozwiązania, które zadziałałoby, gdyby pierwsza część zmieniła swoją długość (wiesz, że to się zmieni, ponieważ "nie należy zmieniać" zawsze wydaje się oznaczać, że się zmieni).
Za to, co mam na razie, używam XQuery, aby wyciągnąć nazwę pliku, ponieważ uznałem, że jest to lepsze niż prosta manipulacja ciągiem. Rzucam ten ciąg do xml, aby to zrobić, ale nie jestem ekspertem od XQuery, więc oczywiście mam problemy. Znalazłem funkcję dla XQuery (substring-before), ale nie byłem w stanie jej uruchomić (nie jestem nawet pewien, czy ta funkcja będzie działać z SQL Server). Być może istnieje funkcja XQuery, aby to zrobić łatwo, ale jeśli nie jestem tego świadomy.
Tak, mam nazwę pliku z tabeli z kwerendy podobny do następującego:
select CAST(parms as xml).query('data(/xml/@filename)') as p
from Table1
z tego, że sądzę, że byłbym w stanie oddać to z powrotem do łańcucha wtedy zrobić kilka instring lub charindex, aby dowiedzieć się, gdzie znajdują się podkreślenia, aby można je było zamknąć w funkcji podłańcuchowej, aby wybrać potrzebną część. Nie wdając się zbytnio w to, jestem pewien, że w końcu mogę to zrobić w ten sposób, ale wiem, że musi być łatwiejszy sposób. W ten sposób powstanie ogromne nieczytelne pole w Oświadczeniu SQL, które nawet jeśli przeniosę go do funkcji, nadal będzie mylące, aby spróbować dowiedzieć się, co się dzieje.
Jestem pewien, że jest łatwiejsze, ponieważ wydaje się, że jest to prosta operacja na łańcuchach. Być może ktoś wskaże mi właściwy kierunek. Dzięki
Jaką wersję programu SQL Server? –
Niestety, nie widzę tego komentarza do chwili obecnej. Używamy teraz SQL Server 2008. – Dusty