2017-05-01 2 views
0

Ich habe eine Reihe von Strings:der String zwischen zwei Zeichen

String 1:  1*2*3*4*45* 
String 2:  1*2*3*4*500* 
String 3:  1*2*3*4*5*6*300* 

Das Ziel ist es, die folgenden Strings zurück:

String 1: 45 
String 2: 500 
String 3: 300 

Wie erreiche ich dies mit SQL-Abfragen?

+1

wenn es immer die richtigen Charaktere sind? Wenn ja, kehren Sie die Strings um und suchen Sie nach dem ersten * beginnend im 2. Trank, greifen Sie den String links von dieser Position, ersetzen Sie das * durch '' und kehren Sie den String dann wieder um. oder case wenn String wie '% * 45 *%' dann 45 wenn String wie '% * 500 *%' dann 500 Ende etc .. – xQbert

+0

Datenbank ist IO-Gerät, verantwortlich für das Lesen und Schreiben von Daten. Verwenden Sie "das richtige Werkzeug für den Job" - verarbeiten Sie Ihre Daten auf der Codepage - die meisten Programmiersprachen bieten effektive Methoden dafür. – Fabio

+2

Viele Duplikate, wählen Sie einen aus: https://www.google.com/#q=stack+overflow+sql+get + substring+zwischen + zwei Zeichen –

Antwort

2

eine Kombination aus charindex() Verwendung, stuff(), len(), reverse() und substring():

create table t (str varchar(64)); 
insert into t values 
('1*2*3*4*45*') 
,('1*2*3*4*500*') 
,('1*2*3*4*5*6*300*'); 
select 
    str 
    , last_value = substring(
     str 
     ,1+len(str)-charindex('*',stuff(reverse(str),1,1,'')) 
     ,charindex('*',stuff(reverse(str),1,1,''))-1) 
from t; 

rextester Demo: http://rextester.com/KYP16744

kehrt:

+------------------+------------+ 
|  str  | last_value | 
+------------------+------------+ 
| 1*2*3*4*45*  |   45 | 
| 1*2*3*4*500*  |  500 | 
| 1*2*3*4*5*6*300* |  300 | 
+------------------+------------+ 
1

Hier ist eine weitere Option. Wahrscheinlich wird es die gleiche Lösung von SqlZim sein. Nur ein weiterer Weg, um "die gleiche Katze zu häuten".

with mycte(SomeVal) as 
(
    select '1*2*3*4*45*' union all 
    select '1*2*3*4*500*' union all 
    select '1*2*3*4*5*6*300*' 
) 

select * 
    , reverse(left(substring(reverse(SomeVal), 2, len(SomeVal)), charindex('*', substring(reverse(SomeVal), 2, len(SomeVal))) - 1)) 
from mycte 
Verwandte Themen