2016-12-21 14 views
3

Ich verwende T-SQL. Ich habe diese zwei Saiten.Nur Text links von "-" ziehen

AX20-xxxxxxxx 
T11-xxxxxxxxx 

Für die erste, die ich möchte ich nur TAX

Für die zweite ziehen können, wollen.

+0

bitte Ihre dbms markieren. –

+1

Was [tag: rdbms] verwenden Sie? – Mureinik

+3

Willkommen bei Stack Overflow! Dies ist eine Website, wo Sie Fragen stellen können und Antworten auf Probleme bekommen, die Sie mit der Software haben, die Sie geschrieben haben, aber es ist keine "tu meine Hausaufgaben für mich" oder "tue meine Arbeit für mich" -Seite. Wenn Sie eine Frage stellen, sollten Sie den Code, den Sie geschrieben haben, und die spezifischen Fehler, die Sie erhalten, oder die Ergebnisse, die Ihr Programm produziert, und eine Erklärung der erwarteten Ergebnisse einbeziehen. Ohne das gibt es wirklich nicht viel, was wir tun können, um dir zu helfen. Bitte bearbeiten Sie Ihre Frage, um zu zeigen, was Sie getan haben und welche Probleme der Code hat. Willkommen zu Stack Overflow! –

Antwort

3

Angenommen, Sie benötigen den Teilstring vom Anfang bis zum Auftreten der ersten Zahl, verwenden Sie PATINDEX, um den Index der ersten Zahl und SUBSTRING danach zu erhalten.

select substring(colname, 1, patindex('%[0-9]%',colname)-1) 
from tablename 
+0

Danke, das hat funktioniert. – tp1

4

Werfen Sie einen Blick auf PATINDEX()

Declare @S varchar(max) = 'AX20-xxxxxxxx' 
Select Left(@S,PatIndex('%[0-9]%',@S)-1) 

Returns

AX 
+0

Dies ist eine sauberere Lösung –

+0

@DuduMarkovitz Meh .. Tomaten, Kartoffeln. Allerdings bin ich ein Python-Typ, aber ich kann mir nicht vorstellen, dass das alles nötig wäre. –

+0

Stellen Sie sich einfach Python-Verarbeitungsfunktionen auf SQL-Zeilenebene vor ... –

3

In SQL Server Sie Teilzeichenfolge PATINDEX() bekommen erste Ziffer Auftreten und verwenden Sie dann LEFT() Funktion erhalten verlassen können

WITH T AS 
(
    SELECT 'AX20-xxxxxxxx' as Str 
    UNION ALL 
    SELECT 'T11-xxxxxxxxx' as Str 
) 
SELECT LEFT(Str,PATINDEX('%[0-9]%',Str)-1) FROM T 
0

Ok, ich bin mir ziemlich sicher, dass dies für eine DBMS-Sprache wie sql ist, aber ich werde eine Antwort in Python posten. Denken Sie daran, dies ist wahrscheinlich NICHT die effizienteste Lösung, aber die einzige, die ich denken konnte. Es sollte einfach in jede Sprache zu implementieren sein, aber ich bin nicht sicher über SQL.

def is_number(s): 
    try: 
     float(s) 
     return True 
    except ValueError: 
     return False 

def pulltext(text): 
    pulled = [] 
    for x in text: 
     if x == '-': 
      index = text.index('-') 
      for y in text[:index]: 
        if is_number(y): 
         pass 
        else: 
         pulled.append(y) 
    pulled = ''.join(pulled) 
    return pulled 

textinput = input('String to pull characters from') 
print(pulltext(textinput)) 

Da dies die falsche Sprache ist, können durch diese gehen: die is_number Funktion gibt True, wenn die Zeichenfolge eine Zahl enthält, weil Python hat keine solche Sache.

Zuerst gehen wir durch die Zeichenfolge und finden das '-', das die for-Schleife ist.

Dann schneiden wir den Text von Anfang an auf den Index, wo der ‚-‘ war (das ist, was das ‚:‘ für ist, von Anfang an auf den Index des ‚-‘)

Als nächstes werden wir gehe durch jedes Zeichen vor dem '-' (die for-Schleife); und prüfe, ob es eine Nummer mit der vorherigen Funktion ist. Wenn es sich nicht um eine Nummer handelt, fügen Sie sie zu einer Liste hinzu.

Am Ende einfach die Liste in eine Zeichenfolge, und drucken Sie diese Zeichenfolge.

Ich hoffe, dass geholfen, und ich apoligize die falsche Sprache für die Verwendung, aber ich denke, Python die beste Sprache ist logisch zu erklären, mit :)