代码之家  ›  专栏  ›  技术社区  ›  MsLis

选择分隔字符串字段的子集

  •  0
  • MsLis  · 技术社区  · 6 年前

    我的表中有一个字段的数据格式如下:

    Term 1~Term 2~Term 3~Term 4~Term 5~Term 6~

    所有非空值都包含6个平铺分隔的字符串,这些字符串可能有几个单词长。

    我需要提取 此字段的最后两个子字符串 作为查询的一部分。
    我对将数据拆分为多个记录不感兴趣,而且我没有创建存储过程的权限。

    提前谢谢你的建议。

    2 回复  |  直到 6 年前
        1
  •  1
  •   James G    6 年前

    声明@Term VARCHAR(100)

    选择@Term='abc~def~ghi~jkl~mno~pqr~'

    SELECT RIGHT(@Term,  CHARINDEX('~',REVERSE(@Term),CHARINDEX('~',REVERSE(@Term),2)+1)-1)
    

    这将给出最后两个条件,~完好无损。注意,您可以将REPLACE()包装起来,在其中放置除颚化符以外的内容。

        2
  •  0
  •   Harry    6 年前

    另一种方法是。。使用string_split(2016年)或其他地方可以找到的等效UDF。。拆开绳子

        declare @term varchar(100) = 'abc~def~ghi~jkl~mno~pqr~'
    ; with mycte as (
    select
     value as string_value
    , row_number() over (order by (select  1000) )as row_num 
    from string_split(@term,'~'))
    
    
    select top 2 string_value 
     from mycte
     where string_value<>''
    
     order by row_num desc