【问题标题】:SQL statement to extract the last word in a string?SQL语句提取字符串中的最后一个单词?
【发布时间】:2019-08-27 04:08:52
【问题描述】:

我在 SQL Server 2016 中运行带有 CHARINDEX 的 SELECT 语句,以使用空格作为分隔符返回字符串中的最后一个单词。它适用于某些领域,而对于其他领域,它会去除一些字符。有人可以指出我正确的方向吗?

我已经尝试了 RIGHT、LEFT 和 REVERSE 内置函数以及 SUBSTRING 函数。

SELECT TRIM(RIGHT('XXxxx Xxxxxx x Xxxxxx Xxxxx Xxxx Xxxxxx 5 - Xxxxxx - Xxxxxx Xxxxxxx Xxxxxxxxxx Xxxxxxxxxx',CHARINDEX(' ','XXxxx Xxxxxx x Xxxxxx Xxxxx Xxxx Xxxxxx 5 - Xxxxxx - Xxxxxx Xxxxxxx Xxxxxxxxxx Xxxxxxxxxx',0)+1))

我期待最后一个词 - Xxxxxxxxxx,但对于这个特定的记录,上面的查询返回 xxxxxxx 并忽略前面的 3 个字符。对于其他一些记录,它可以工作并返回最多 8 个字符。如果指出正确的方向,我将不胜感激。

【问题讨论】:

    标签: sql sql-server charindex


    【解决方案1】:

    见下面的代码。这个想法是:

    1. 反转字符串。
    2. 倒车后找到第一个空格
    3. 把所有东西都放在空格的左边
    4. 再次反转它,因为字符串被反转了。

    我没有给你直接的答案,而是把它分解了,这样你就可以更好地理解它了

    declare @something varchar(20) = '1234 5678 192'
    
    select @something as original
      , reverse(@something) as reversed
      , charindex(' ',reverse(@something)) last_space_position
      , left(reverse(@something), charindex(' ',reverse(@something))) what_you_need_in_reverse
      , reverse(left(reverse(@something), charindex(' ',reverse(@something)))) what_you_need
    

    【讨论】:

      【解决方案2】:

      这是一种在不反转值本身的情况下提取值的方法:

      select stuff(@something,
                   1,
                   len(@something) - charindex(' ', reverse(@something) + ' ') + 1,
                   '')
      

      如果字符串没有空格,此公式也适用。

      【讨论】:

        猜你喜欢
        • 2012-03-21
        • 1970-01-01
        • 2022-01-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-09-07
        • 2021-11-11
        • 2015-05-08
        相关资源
        最近更新 更多