Używając T-SQL, w jaki sposób mogę uzyskać ostatnie znaki z kolumny varchar?Podłoża T-SQL - ostatnie 3 znaki
Więc tekst kolumna jest IDS_ENUM_Change_262147_190
i muszę 190
Używając T-SQL, w jaki sposób mogę uzyskać ostatnie znaki z kolumny varchar?Podłoża T-SQL - ostatnie 3 znaki
Więc tekst kolumna jest IDS_ENUM_Change_262147_190
i muszę 190
SELECT RIGHT(column, 3)
to wszystko, czego potrzebujemy.
Możesz również wykonać LEFT()
w ten sam sposób.
Należy mieć na uwadze, jeśli używa się tego w klauzuli WHERE
, że RIGHT()
nie może używać żadnych indeksów.
Można użyć sposób:
SELECT RIGHT(RTRIM(columnName), 3)
LUB
SELECT SUBSTRING(columnName, LEN(columnName)-2, 3)
Czy jest przewaga w jedną stronę nad drugą? I czy RTRIM jest potrzebny (wydaje mi się zbyteczny)? – noelicus
Zadanie można wykonać na kilka sposobów i tutaj pokazałem, używając dwóch wspólnych sposobów. Pierwszy przypadek jest szybszy niż drugi sposób. RTRIM nie jest obowiązkowe. Jest używany tylko po to, aby pominąć dodatkową przestrzeń po prawej stronie. Dzięki –
Ponieważ więcej sposobów, aby myśleć o nim są zawsze dobre:
select reverse(substring(reverse(columnName), 1, 3))
Nie, więcej nie zawsze jest lepiej. –
Masz rację. Zawsze będziesz mieć wszystkie narzędzia potrzebne do wykonania każdej pracy, którą chcesz wykonać. Wierzę, że wiedza nie równa się mocy. –
Nie jestem do końca pewien, co to ma znaczyć. Proponowane przez ciebie rozwiązanie jest niepotrzebnie skomplikowane i nie ma żadnych okoliczności, w których byłoby to właściwe rozwiązanie. Dlatego jest zły. –
declare @newdata varchar(30)
set @newdata='IDS_ENUM_Change_262147_190'
select REVERSE(substring(reverse(@newdata),0,charindex('_',reverse(@newdata))))
=== wyjaśnienia ===
znalazłem to łatwiejsze do odczytania napisane tak:
SELECT
REVERSE(--4.
SUBSTRING(-- 3.
REVERSE(<field_name>),
0,
CHARINDEX(-- 2.
'<your char of choice>',
REVERSE(<field_name>) -- 1.
)
)
)
FROM
<table_name>
jeśli chcesz konkretnie znaleźć ciągi który kończy pożądanych znaków wówczas Pomożesz ..
select * from tablename where col_name like '%190'
To nie odpowiada na pytanie. OP chce wiedzieć, jak uzyskać 3 ostatnie znaki, bez względu na to, czym są, a nie konkretny ciąg jak 190. – BradleyDotNET
Jeśli * zamierzasz * przeszukiwać duże ilości danych w ten sposób, istnieje * sposób na odzyskanie wykorzystania indeksów. Utwórz kolumnę obliczeniową, która jest łańcuchem w odwrotnej kolejności. Więc jakie były właściwe (najmniej znaczące) trzy postacie, teraz są lewymi (najbardziej znaczącymi) trzema postaciami. Następnie indeksuj tę kolumnę i poszukaj "GDZIE LEFT (odwrócone, 3) = REVERSE (" 190 ")'. (Nudzę się, czy możesz powiedzieć?) – MatBailie
Dzięki wam! – Jared