2012-11-20 12 views
20

Mam pole bazy danych MSSQL, który wygląda jak na poniższych przykładach:wybrać dane do spacji?

u129 james 
u300 chris 
u300a jim 
u202 jane 
u5 brian 
u5z brian2 

Czy istnieje sposób, aby wybrać pierwszy zestaw znaków? Zasadniczo wybierz wszystkie znaki do pierwszej linii?

Próbowałem poradzić sobie z LEWĄ, PRAWĄ, LEN, ale nie mogłem wymyślić sposób, aby to zrobić ze zmiennymi długościami łańcuchów, jak w moim przykładzie.

Dzięki!

Odpowiedz

56

Można użyć combiation z LEFT i CHARINDEX znaleźć indeks pierwszego miejsca, a następnie chwycić wszystko na lewo od tego.

SELECT LEFT(YourColumn, charindex(' ', YourColumn) - 1) 

A w przypadku dowolnych kolumn nie mają miejsca w nich

SELECT LEFT(YourColumn, CASE WHEN charindex(' ', YourColumn) = 0 THEN 
    LEN(YourColumn) ELSE charindex(' ', YourColumn) - 1 END) 
+2

@Beth - proszę być ostrożnym z edycji, wyczyściłeś połowę mojej odpowiedzi. Sugerowanie dodania linku referencyjnego byłoby bardziej pomocne. – LittleBobbyTables

+0

Przepraszamy, LittleBobbyTables, nie wiedziałem, że mamy konkurencyjne modyfikacje. – Beth

+1

Dobre wytłumaczenie, ale jesteś wolny przez jednego - to również chwyta przestrzeń. – Blorgbeard

2
select left(col, charindex(' ', col) - 1) 
+0

Problem z tego podejścia jest to, że trzeba wspomnieć 'YourColumn' dwa razy, co jest problematyczne, jeśli' YourColumn' jest wynikiem obliczeń (na przykład w wyniku 'RIGHT') –

1

Alternatywą jeśli czasami nie mają przestrzenie nie chcą używać case

select REVERSE(RIGHT(REVERSE(YourColumn), LEN(YourColumn) - CHARINDEX(' ', REVERSE(YourColumn)))) 

To działa w SQL Server, a według mojego szukasz MySQL ma te same funkcje

1

Jeśli pierwszy Kolumna jest zawsze taki sam rozmiar (w tym spacje), to można po prostu wziąć te znaki (przez LEFT) i oczyścić przestrzenie (z RTRIM):

SELECT RTRIM(LEFT(YourColumn, YourColumnSize)) 

Alternatywnie, można wyodrębnić drugi (lub trzeciego, itd) w kolumnie (stosując SUBSTRING)

SELECT RTRIM(SUBSTRING(YourColumn, PreviousColumnSizes, YourColumnSize)) 

Jedną z zalet tego rozwiązania (zwłaszcza jeśli YourColumn jest wynikiem obliczeń) jest YourColumn podano tylko jeden raz.