2011-12-02 29 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

相关问题