2017-07-03 3 views
2

Dies ist mein Sql Fiddle mit Schema und Daten. Die SQL-Abfrage, die ich geschrieben habe, funktioniert einwandfrei und gibt die Daten zurück.SQL-Daten mit unnötigen Platz auf der rechten Seite

http://sqlfiddle.com/#!6/bcf65/4

Aber die Verwirrung ist, warum ich „Raum“ zu tun haben, wenn ich niemals angelegt habe, während die Daten in der Tabelle einfügen. Für Beispielansicht dieses Teil des Codes aus der Abfrage:

       (SUBSTRING 
           (
           [xml] 
           ,CHARINDEX('P',[xml]) + 3 
           ,LEN([xml])-8 
           ) 

in SubString Funktion Ich habe etwas Platz entfernen LEN([xml])-8 das Ergebnis zu erhalten.

Lassen Sie uns zwei Szenarien annehmen: (beide sind von SQL Fiddle INSERT-Abfrage)

  1. i 177PKR3572427992899 mit Daten, die eine Reihe haben. Seine Gesamtlänge beträgt 19. Also in SubString-Funktion oben verwendet, ist seine Startposition 7, d. H. 3 nach R in Daten und um seine Länge beim Überspringen der letzten 2 Ziffern zu erhalten, sollte die Len() Funktion sein. Aber stattdessen muss ich -8 verwenden, um die letzten 2 Ziffern zu überspringen. Es ist wirklich verwirrend für mich, woher dieser Raum kam? Lass uns jetzt den zweiten sehen.

  2. Ich habe eine Zeile mit Daten 0PKR101. Seine Gesamtlänge ist "7". Also in SubString-Funktion in SQL Fiddle ist seine Startposition 4, d. H. 1 nach R in Daten und die Len() Funktion sein, um seine Länge zu erhalten, während die letzten 2 Ziffern überspringen. Aber, stattdessen muss ich -6 hier verwenden, um die letzten 2 Ziffern zu überspringen. Wie kann ich es als len(xml)-1 funktioniert, wie es sein sollte ..

+0

Ich bin neugierig: Warum nennst du deine Spalte '[xml]', tag die Frage als solche, aber ich kann keine XML-bezogenen Sachen sehen? – Shnugo

+0

@Shnugo Entschuldigung entfernt das XML-Tag. Nun, diese Werte werden aus xml-Dateien in die Spalte geholt, also ja ... – ARr0w

Antwort

2

Sie haben Ihr „177PKR“

das dritte Argument ist die Länge, und Sie beginnen, aus der Zeit nach dem PKR.

So ist Ihre Länge {total length} - 2 - ({index of P}+3), die {total length} - 8 im ersten Fall und {total length} - 6 in der Sekunde entspricht.

hier ist eine bunte Erklärung: explanation

der allgemeine Fall, wenn Sie einen Teil vom Ende wollen, ist:

substring(string, offset, length - offset - x) 

wo x die Sie vom Ende will versetzt ist.

+0

2 - ({Index von P} +3) = -2 -7 (7 ist die Startposition) = -9. Wenn ich einen negativen Wert mit 'Len()' verwende, entfernt es Platz von links oder entfernt Platz von rechts? – ARr0w

+1

Wenn es bei 1 indiziert ist, habe ich einen Fehler gemacht, dann ist es der Index von P + 2. – satibel

+0

nah, vielleicht Indexwert ist 0 und Sie sind richtig, mein Mann. – ARr0w

Verwandte Themen