2011-12-02 32 views

回答

87
SELECT RIGHT(column, 3) 

這就是你需要的。

您也可以用同樣的方法做LEFT()

請記住,如果您在WHERE子句中使用此項,RIGHT()不能使用任何索引。

+7

如果您*要*以這種方式搜索大量數據,那麼*是一種恢復索引使用的方法。創建一個計算列,該列是相反順序的字符串。那麼什麼是正確的(最不重要的)三個字符現在是左邊的(最重要的)三個字符。然後,您將該列索引並查找「WHERE LEFT(反向,3)= REVERSE('190')'。 (我很無聊,你能告訴嗎?) – MatBailie

+0

謝謝你們! – Jared

13

你可以用任何一種方式:

SELECT RIGHT(RTRIM(columnName), 3) 

OR

SELECT SUBSTRING(columnName, LEN(columnName)-2, 3) 
+0

一種優勢比另一種更有優勢嗎? RTRIM是否必要(對我來說似乎是多餘的)? – noelicus

+0

這項工作可以通過幾種方式完成,在這裏我已經通過兩種常見方式進行了展示。第一種情況比第二種情況快。 RTRIM不是強制性的。它僅用於在右側省略任何額外的空間。謝謝 –

5

因爲更多的途徑來想一想總是好的:

select reverse(substring(reverse(columnName), 1, 3)) 
+1

不,更多並不總是更好。 –

+1

你說得對。你將永遠擁有你所需要的所有工具來完成你想要做的任何工作。我想,知識並不等於權力。 –

+0

我不確定這是什麼意思。您提出的解決方案不必要的複雜,並且沒有任何情況可能是正確的解決方案。因此,這很糟糕。 –

1
declare @newdata varchar(30) 
set @newdata='IDS_ENUM_Change_262147_190' 
select REVERSE(substring(reverse(@newdata),0,charindex('_',reverse(@newdata)))) 

===說明===

我發現它更易於閱讀這樣寫的:

SELECT 
    REVERSE(--4. 
     SUBSTRING(-- 3. 
      REVERSE(<field_name>), 
      0, 
      CHARINDEX(-- 2. 
       '<your char of choice>', 
       REVERSE(<field_name>) -- 1. 
      ) 
     ) 
    ) 
FROM 
    <table_name> 
  1. 反向文本
  2. 尋找具有特異性字符的第一次出現(即第一次出現FROM文本的結尾)。獲取此char的索引
  3. 再次查看反轉文本。從索引0到char的索引搜索。這給了你正在尋找的字符串,但在反向
  4. 反轉反轉字符串給你你想要的子
+1

解釋一起去你的代碼是有幫助 – krsteeve

+0

Stackoverflow.com的評論可以接受通過簡單的標記(標記格式)的格式。有可用的幫助。要顯示代碼段,可以用四個空格前綴每行。 – FooF

-3

,如果你想找到具體的字符串與期望的字母結尾那麼這將幫助你..

select * from tablename where col_name like '%190' 
+1

這不回答這個問題。 OP想知道如何獲得最後3個字符,不管它們是什麼,也不是像190這樣的特定字符串。 – BradleyDotNET

相關問題