Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
提取字符串中最后一个单词的SQL语句?_Sql_Sql Server_Charindex - Fatal编程技术网

提取字符串中最后一个单词的SQL语句?

提取字符串中最后一个单词的SQL语句?,sql,sql-server,charindex,Sql,Sql Server,Charindex,我在SQL Server 2016中使用CHARINDEX运行SELECT语句,以使用空格作为分隔符返回字符串中的最后一个单词。它适用于某些领域,也适用于其他领域,它去掉了一些字符。有人能给我指一下正确的方向吗 我尝试了内置的RIGHT、LEFT和REVERSE函数以及SUBSTRING函数 SELECT TRIM(RIGHT('XXxxx Xxxxxx x Xxxxxx Xxxxx Xxxx Xxxxxx 5 - Xxxxxx - Xxxxxx Xxxxxxx Xxxxxxxxxx Xxxxx

我在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))

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

请参阅下面的代码。这个想法是:

  • 把绳子倒过来
  • 找到反转后的第一个空格
  • 把所有东西都放到空间的左边
  • 当字符串反转时,再次反转它
  • 我不只是给你一个直截了当的答案,而是把它分解了,这样你就能更好地理解它

    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
    

    请参阅下面的代码。这个想法是:

  • 把绳子倒过来
  • 找到反转后的第一个空格
  • 把所有东西都放到空间的左边
  • 当字符串反转时,再次反转它
  • 我不只是给你一个直截了当的答案,而是把它分解了,这样你就能更好地理解它

    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
    

    以下是一种提取值而不反转值本身的方法:

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

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

    以下是一种提取值而不反转值本身的方法:

    select stuff(@something,
                 1,
                 len(@something) - charindex(' ', reverse(@something) + ' ') + 1,
                 '')
    
    如果字符串没有空格,此公式也有效