T-SQL子字符串-后3个字符


Answers:


113
SELECT RIGHT(column, 3)

这就是您所需要的。

您也可以LEFT()用相同的方式做。

请记住,如果您在不能使用任何索引的WHERE子句中使用此功能RIGHT()


9
如果你要搜索大量数据的这种方式,一种方法来恢复索引的使用。创建一个计算列,该列是相反顺序的字符串。那么,右边的(最低有效)三个字符现在是左边的(最高有效)三个字符。然后,您对该列建立索引并寻找WHERE LEFT(reversed,3) = REVERSE('190')。(我很无聊,您能告诉我吗?)
MatBailie 2011年

19

您可以使用以下任何一种方式:

SELECT RIGHT(RTRIM(columnName), 3)

要么

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

一种方法比另一种方法有优势吗?RTRIM是否必要(对我来说似乎多余)?
noelicus

可以通过多种方式完成这项工作,在这里,我已使用两种常见方式进行了展示。第一种情况比第二种方法快。RTRIM不是强制性的。它仅用于省略右侧的任何多余空间。谢谢
Elias Hossain

6

因为考虑它的更多方法总是好的:

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

1
不,更多并不总是更好。
亚当·罗宾逊

1
你是对的。您将始终拥有完成所需工作所需的所有工具。我想知识不是力量。
Ben Thul 2011年

我不太确定那是什么意思。您提出的解决方案不必要地复杂,并且在任何情况下都不是正确的解决方案。因此,这很糟糕。
亚当·罗宾逊

1
欢迎来到软件开发世界,在这里,“轻松”并非总是可能的。如果您判断解决方案是否正确的标准之一是它是否复杂,那么您的业务就错了。我是说鉴于上述问题我会使用该解决方案吗?否。我的意思是,看到多种解决方案很有价值,因为它可以将您的视野扩大到现有的范围。在此之前,OP可能不了解反向功能。现在他/他知道了。我对此的不赞成意见是,应将它们保留给明显不正确的解决方案。矿山工程
本图尔

5
关于软件开发性质的广泛认同以及我在行业中显然缺乏资历的问题与本论坛无关,因此在此我不再赘述。下注表示在某种程度上答案是错误的或“不好的”。你的回答是不好的,因为它是不必要的复杂; reverse由于添加的答案与您的答案不同,添加了两个或四个以上电话的答案是否可以作为附加答案?如果我加密和未加密字符串怎么办?您说的是,任意无用的复杂性在某种程度上不是要考虑的。
亚当·罗宾逊

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 END匹配项)。获取此字符的索引
  3. 再次查看反转的文本。从索引0到您的char的索引进行搜索。这给出了您要查找的字符串,但是相反
  4. 颠倒颠倒的字符串给你想要的子字符串

Stackoverflow.com注释可以接受通过简单标记(标记向下格式)进行的格式化。有可用的帮助。要显示代码段,可以在每行前面添加四个空格。
FooF

-3

如果您想专门找到以所需字符结尾的字符串,那么这将对您有帮助...

select * from tablename where col_name like '%190'

2
这不能回答问题。在OP想知道如何获得最后3个字符,不管它们是什么,而不是特定的字符串像190
BradleyDotNET
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.