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

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.


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)

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))

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

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'

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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.