T-SQL-Teilzeichenfolge - Letzte 3 Zeichen

70

Wie würde ich mit T-SQL die letzten 3 Zeichen einer Varchar-Spalte abrufen?

Also der Spaltentext ist IDS_ENUM_Change_262147_190und ich brauche190

Jared
quelle

Antworten:

113
SELECT RIGHT(column, 3)

Das ist alles was du brauchst.

Sie können dies auch LEFT()auf die gleiche Weise tun .

Denken Sie daran, wenn Sie dies in einer WHEREKlausel verwenden, dass RIGHT()keine Indizes verwendet werden können.

JNK
quelle
9
Wenn Sie sind große Datenmengen auf diese Weise suchen gehen, es ist eine Möglichkeit , die Verwendung von Indizes zu erholen. Erstellen Sie eine berechnete Spalte, bei der es sich um die Zeichenfolge in umgekehrter Reihenfolge handelt. Was dann die rechten (niedrigstwertigen) drei Zeichen waren, sind jetzt die linken (höchstwertigen) drei Zeichen. Anschließend indizieren Sie diese Spalte und suchen nach WHERE LEFT(reversed,3) = REVERSE('190'). (Mir ist langweilig, können Sie sagen?)
MatBailie
19

Sie können beide Möglichkeiten verwenden:

SELECT RIGHT(RTRIM(columnName), 3)

ODER

SELECT SUBSTRING(columnName, LEN(columnName)-2, 3)
Elias Hossain
quelle
Gibt es einen Vorteil gegenüber dem anderen? Und ist das RTRIM notwendig (erscheint mir überflüssig)?
Noelicus
Die Arbeit kann auf verschiedene Arten erledigt werden, und hier habe ich gezeigt, wie man auf zwei Arten vorgeht. Der erste Fall ist schneller als der zweite. RTRIM ist nicht obligatorisch. Es wird nur verwendet, um zusätzlichen Platz auf der rechten Seite wegzulassen. Danke
Elias Hossain
6

Weil mehr Denkweisen immer gut sind:

select reverse(substring(reverse(columnName), 1, 3))
Ben Thul
quelle
1
Nein, mehr ist nicht immer besser.
Adam Robinson
1
Du hast recht. Sie haben immer alle Werkzeuge, die Sie benötigen, um die Aufgabe zu erledigen, die Sie ausführen möchten. Wissen ist nicht gleich Macht, denke ich.
Ben Thul
Ich bin mir nicht sicher, was das bedeuten soll. Die von Ihnen vorgeschlagene Lösung ist unnötig komplex und es gibt keinen Umstand, unter dem sie die richtige Lösung wäre. Daher ist es schlecht.
Adam Robinson
1
Willkommen in der Welt der Softwareentwicklung, in der ein "einfaches" nicht immer möglich ist. Wenn eines Ihrer Kriterien dafür, ob eine Lösung richtig ist oder nicht, die Komplexität ist, sind Sie im falschen Geschäft. Soll ich sagen, dass ich diese Lösung angesichts des angegebenen Problems verwenden würde? Nein. Ich sage, dass es sinnvoll ist, mehrere Lösungen zu sehen, da dies Ihren Horizont auf das erweitert, was es gibt. Vielleicht wusste das OP vorher nichts über die Umkehrfunktion. Jetzt tut er es. Meine Meinung zu Downvotes hier ist, dass sie offensichtlich falschen Lösungen vorbehalten sein sollten. Meine Werke
Ben Thul
5
Erweiterte Predigten über die Art der Softwareentwicklung und meine offensichtliche mangelnde Qualifikation in der Branche sind in diesem Forum keine relevanten Themen, daher werde ich sie hier nicht ansprechen. Downvotes zeigen an, dass eine Antwort auf einer bestimmten Ebene entweder falsch oder "schlecht" ist. Ihre Antwort ist schlecht, weil sie unnötig komplex ist. Wäre eine Antwort, bei der zwei oder vier weitere Anrufe hinzugefügt wurden, reverseeine zusätzliche Antwort, da sie sich von Ihrer Antwort unterscheidet? Was ist, wenn ich die Zeichenfolge verschlüsselt und unverschlüsselt habe? Sie sagen, dass willkürliche nutzlose Komplexität irgendwie keine Überlegung ist.
Adam Robinson
1
declare @newdata varchar(30)
set @newdata='IDS_ENUM_Change_262147_190'
select REVERSE(substring(reverse(@newdata),0,charindex('_',reverse(@newdata))))

=== Erklärung ===

Ich fand es einfacher, so geschrieben zu lesen:

SELECT
    REVERSE( --4.
        SUBSTRING( -- 3.
            REVERSE(<field_name>),
            0,
            CHARINDEX( -- 2.
                '<your char of choice>',
                REVERSE(<field_name>) -- 1.
            )
        )
    )
FROM
    <table_name>
  1. Kehren Sie den Text um
  2. Suchen Sie nach dem ersten Vorkommen eines bestimmten Zeichens (dh dem ersten Vorkommen FROM END of text). Ruft den Index dieses Zeichens ab
  3. Sieht sich den umgekehrten Text noch einmal an. sucht von Index 0 bis Index Ihres Zeichens. Dies gibt die gesuchte Zeichenfolge an, jedoch in umgekehrter Reihenfolge
  4. Kehrte den umgekehrten String um, um den gewünschten Teilstring zu erhalten
user2176274
quelle
Kommentare von Stackoverflow.com können die Formatierung durch einfaches Markieren (Mark-Down-Format) akzeptieren. Es ist Hilfe verfügbar. Um ein Codesegment anzuzeigen, können Sie jeder Zeile vier Leerzeichen voranstellen.
FooF
-3

Wenn Sie gezielt Zeichenfolgen finden möchten, die mit den gewünschten Zeichen enden, hilft Ihnen dies ...

select * from tablename where col_name like '%190'
Sharath
quelle
2
Dies beantwortet die Frage nicht. Das OP möchte wissen, wie man die letzten 3 Zeichen erhält, egal was sie sind, keine bestimmte Zeichenfolge wie 190.
BradleyDotNET