2012-03-29 26 views
5

Potrzebuję konwertować dane z arkusza kalkulacyjnego do instrukcji insert w SQL. Opracowałem większość wyrażeń regularnych do używania narzędzia znajdowania i zamiany w systemie SSMS, ale napotykam problem, próbując odwołać się do dziewiątego elementu z nawiasami w moim ostatnim miejscu.Limit grupy przechwytywania-wyrażeń regularnych wyrażeń regularnych SQL?

Oto oryginalne nagranie:

Blue Doe 12/21/1967 1126 Queens Highway Torrance CA 90802 N 1/1/2012 

I to jest to, czego potrzebuję (na razie):

select 'Blue','Doe','19671221','1126 Queens Highway','Torrance','CA','90802','N','20120101' 

Ze względu na ograniczenia dotyczące liczby w nawiasach przedmiotów dozwolonych muszę uruchomić poprzez Wymień trzy razy. Może to działać w procedurze przechowywanej, jeśli mogę najpierw zrobić to działa jako POC.

To pierwszy wyrażenie dopasowywania:

^{:w:b:w:b}{:z}/{:z}/{:z:b[0-9A-Za-z:b]+:b:w:b[A-Z]+:b:z:b:w:b}{:z}/{:z}/{:z} 

I wymienić: \10\2/0\3/\40\5/0\6/\7

To dodaje zera do miesięcy i dni tak, że mają co najmniej dwa znaki.

Następny mecz zmienia format daty w formacie wymaganym w zapytaniu (brak komentarzy na temat niewykorzystywania pola daty) Jest to wymóg klienta dla bazy danych.

Dopasowane wyrażenie:

^{:w:b:w:b}[0-9]*{[0-9]^2}/[0-9]*{[0-9]^2}/{:z}{:b[0-9A-Za-z:b]+:b:w:b[A-Z]+:b:z:b:w:b}[0-9]*{[0-9]^2}/[0-9]*{[0-9]^2}/{:z} 

I wymienić: \1\4\(2,2)\(2,3)\5\8\(2,6)\(2,7)

Wreszcie wstawia finał wyniki do SQL, która będzie przyzwyczaić w instrukcji insert.

Dopasowane wyrażenie:

^{:w}:b{:w}:b{:z}:b{[0-9A-Za-z:b]+}:b{:w}:b{[A-Z]+}:b{:z}:b{:w}:b{:z} 

I wymienić: select '\1','\2','\3','\4','\5','\6','\7','\8','\9'

to wszystko działa z wyjątkiem ostatniej wymiany. Z jakiegoś powodu \ 9 NIE otrzymuje danych z meczu. Jeśli po prostu zastąpię całe wyrażenie zamieniające na \ 9, otrzymam puste miejsce. Jeśli użyję \ 8, otrzymam N. Jeśli wyeliminuję ósmy element z nawiasami, co spowoduje, że moja dziewiąta pozycja jest ósma, zwraca to, co chcę, 20120101.

Moje pytanie brzmi, czy SSMS/SQL pozwala na 9 oznaczonych tagami wyrażenia podczas korzystania z funkcji Znajdź/Zamień i Wyrażenia regularne? Czy może czegoś tutaj brakuje? Wiem, że są inne sposoby na zrobienie tego. Po prostu próbuję zrobić to szybko jako POC zanim przeniesiemy to do sproc lub aplikacji.

Dzięki za pomoc. -Peter

+0

Możesz importować bezpośrednio z arkusza kalkulacyjnego. Czy dane są już w osobnych kolumnach? – RedFilter

+0

Dlaczego należy użyć Zamień? Jeśli dane pochodzą z arkusza kalkulacyjnego i korzystasz z SSMS, dlaczego nie skorzystać z menedżera importu/eksportu? Co więcej, dlaczego formatować dane, czy arkusz kalkulacyjny nie obsługuje formatów daty mm/dd/yyyy? Czy nie możesz napisać formuły komórek, aby połączyć łańcuch, który wstawia dane dla ciebie? – Trisped

+0

Edytuj pytanie, aby dodać odpowiednie formatowanie wyrażeń kodu. Możesz to zrobić przez: otaczanie tyłem ("' "), zaznaczanie wszystkich i klikanie przycisku paska narzędzi' {} 'lub przez zaznaczenie bloku kodu i naciśnięcie Ctrl + K. Możesz wyświetlić podgląd swojego postu (przed jego opublikowaniem) bezpośrednio pod przyciskiem "Prześlij pytanie" podczas wprowadzania go; aktualizacje podglądu w czasie rzeczywistym, więc jest to widok WYSIWYG. Właściwe formatowanie sprawia, że ​​pytanie jest łatwiejsze do odczytania i zrozumienia, a zatem znacznie bardziej prawdopodobne jest uzyskanie odpowiedzi. Dzięki. :) –

Odpowiedz

2

Żadne z pasujących wyrażeń nie działa z rekordem podanym w moim MS SQL Server Management Studio 2008r2.

Z Twojego opisu wynika, że ​​jest problem z Tagged Expression 9, ponieważ pożądany wynik jest zwracany przy użyciu Tagged Expression 8, ale nie 9. Możesz chcieć ask Microsoft or report it as a bug.

Szybszym rozwiązaniem byłoby przeniesienie tekstu, w którym znajduje się funkcja Znajdź/zamień w systemie SSMS, do arkusza kalkulacyjnego i użycie formuł komórek do przeanalizowania danych w komendach wstawiania. Jeśli masz MS Excel, prawdopodobnie będą przydatne funkcje CONCATENATE, FIND i MID. Ponadto pomaga podzielić wartości na własne kolumny, aby można było sformatować datę, a następnie użyć jednego konkatenatu do zbudowania wstawki.

Proszę dać mi znać, jeśli potrzebujesz przykładu.

Aktualizacja: Próbowałem swój przykład w MS SQL Server Management Studio 2008R2, Visual Studio 2005 i Visual Studio 2010 z tym samym rezultatem masz, \ 9 zwraca pusty ciąg. Sprawdzając, znalazłem, że others are also having this issue (zobacz zawartość społeczności od Henrique Evaristo) i że cały system został replaced in the new editors.

Tak więc w odpowiedzi na twoje pytanie SSMS nie obsługuje 9 oznaczonych tagami wyrażeń z powodu błędu.

Jeśli nie możesz skorzystać z idei arkusza kalkulacyjnego, spróbuj podzielić akcję na dwie części, ustawiając pierwsze 8 wartości, a następnie odsuwając ponownie, aby wykonać ostatnią. Na przykład:

^{:w}:b{:w}:b{:z}:b{[0-9A-Za-z:b]+}:b{:w}:b{[A-Z]+}:b{:z}:b{:w}:b:z 
select '\1','\2','\3','\4','\5','\6','\7','\8','\0' 

:w:b:w:b:z:b[0-9A-Za-z:b]+:b:w:b[A-Z]+:b:z:b:w:b{:z} 
\1 
+0

Dzięki za odpowiedź. Myślę, że powodem, dla którego nie działają dla ciebie, jest problem ze sposobem ich wklejenia do SO. Zaktualizowałem oryginalny tekst tak, aby odzwierciedlał "pojedynczą przestrzeń" między każdym elementem, który został wklejony jako wielokrotny po wklejeniu z SQL do SO. –

+0

@Peter Anderson zaktualizowano z wynikami. Zmieniłbym program Excel lub kodowanie własnego rozwiązania, ale dostarczyłem go na wszelki wypadek. Możesz poprzedzić znak "\ 0" specjalnym znakiem, ponieważ nie będziesz już mógł wyszukiwać według linii. Możesz też zmienić drugie zapytanie, aby znaleźć "\ 0" w polu wyboru i zacząć pracę. – Trisped

+0

Dziękuję za odpowiedź na ten temat. Tego właśnie potrzebowałem. I dzięki za dodatkową opcję na końcu. Już trzykrotnie dzieliłem tę rzecz, aby obsłużyć różne zamienniki, nie myślałem o używaniu \ 0 i przyjmowaniu ostatniego bitu na czwartym miejscu. Dzięki jeszcze raz. –

Powiązane problemy