2013-09-25 13 views
5

Potrzebuję wyodrębnić wszystkie znaki po prawej stronie łącznika jako część instrukcji select. W selekcji będą inne kolumny. W poniższym zapytaniu prawe trzy znaki są wybierane z drugiej kolumny. Jak wyodrębnić nieskończoną liczbę znaków po prawej stronie separatora - w moim przypadku łącznika? Czy mogę użyć właściwej funkcji? Czy muszę korzystać z innej funkcji?Wyodrębnianie znaków po prawej stronie oddzielonej wartości w instrukcji SELECT

Select column1, right(column2,3) as extracted, column3 
From myTable 

Używam 2008.

+0

Na którą wersję SQL patrzymy? – Paul

Odpowiedz

13

To pytanie SQL Server ma konkretnej odpowiedzi bazy danych.

W przypadku korzystania z programu SQL Server:

SELECT column1 
    , RIGHT(column2,CHARINDEX('-',REVERSE(column2))-1) as extracted 
    , column3 
FROM myTable 

Możesz dodać CASE oświadczenie lub użyj NULLIF() w przypadku łącznik nie zawsze jest obecny:

SELECT column1 
    , CASE WHEN column2 LIKE '%-%' THEN RIGHT(column2,CHARINDEX('-',REVERSE(column2))-1) 
      END as extracted 
    , column3 
FROM myTable 

Lub:

SELECT column1 
    , RIGHT(column2,NULLIF(CHARINDEX('-',REVERSE(column2)),0)-1) as extracted 
    , column3 
FROM myTable 

Jeśli używasz MySQL, po prostu zmień CHARINDEX() na LOCATE(). Wierzę, że Oracle to INSTR(), a pierwsze dwa parametry są przełączane, najpierw jest to ciąg, który wyszukujesz, a następnie ciąg, którego szukasz.

+0

Używam programu SQL Server. Właśnie zredagowałem temat, żeby to uwzględnić. Dziękuję za szybką odpowiedź. – user2525015

+0

Otrzymuję komunikat "nieprawidłowy parametr długości" powyżej. Interpretuje wartość -1 jako długość. Zapytanie działa, jeśli zastępuję liczbę dodatnią. Czy mogę sprawić, aby powyższe zadziałało na nieokreśloną długość? – user2525015

+0

To się dzieje, gdy nie ma łącznika, drugie zapytanie jest do tego zbudowane. –

1

Jak o:

SUBSTRING(column2, CHARINDEX('-',column2)+1, 8000) 

(. Wymienić 8000 z definicją kolumny)

Oczywiście jeśli kolumna nie może zawsze zawierać myślnik, to można powiedzieć:

SUBSTRING(column2, COALESCE(NULLIF(CHARINDEX('-',column2)+1,1),1),8000) 

Jeśli kolumna nie zawiera łącznika, otrzymasz całą kolumnę. Jeśli chcesz wykluczyć te z wyniku, można dodać WHERE klauzuli:

WHERE CHARINDEX('-', column2) > 0 

Albo można użyć CASE wyrażenia jak koza CO za odpowiedź.

+0

Dzięki. Co masz na myśli przez określenie kolumny? Masz na myśli typ? – user2525015

+0

@ user2525015 Mam na myśli długość. VARCHAR (255), VARCHAR (8000) itd. –

+0

Powoduje to błąd "varchar nie jest wbudowaną nazwą funkcji". Używam programu SQL Server 2008. Początkowo zaniedbałem to. Nie wiem, czy to ma coś wspólnego z błędem. – user2525015

Powiązane problemy