首页 > 解决方案 > SQL 检索具有特殊字符的字符串

问题描述

我正在尝试编写一个查询,仅选择末尾带有“+”的值。

这些值是用户从为他们提供参考评论列表的屏幕中选择的文本片段。一段文本末尾可以有不同的特殊字符:'+' 或 '~' 或 '|'

这些值存储在单个列中,并且是混合的。

对于这个任务,我只需要得到以“+”结尾的评论。

以下是存储的文本示例:

    Addendum and/or contract providing additional event details and conditions.+

There are charges for these services.+

Notify Mall Crew of electrical needs for activities.+

Provide and maintain access to the Hotel1 during event.~

Provide and maintain access to the Hotel2 during event.~

Event organizer/sponsor is responsible for cleanup of event area1.|

Event organizer/sponsor is responsible for cleanup of event area2.|

这是我的查询(不工作)它什么都不返回。

SELECT
    COMMENT
FROM 
    PERMIT A
INNER JOIN 
    PROCESS G ON A.CODE = G.CODE 
WHERE  
    RIGHT(COMMENT, 2) = '+'
    AND COMMENT <> ''   

在此处输入图像描述

非常感谢您的帮助。

标签: sqlsql-servertsqltextdata-retrieval

解决方案


所以我没有测试这个,它可能有错别字,但基本思想是将你的文本转换为XML,然后使用XML工具查询结果。这比尝试解析具有动态行数的字符串要容易得多。

首先,我们从表中提取 xml 字符串,将整个内容转换为每行都有行的 xml 字符串,并在 CR LF 上使用 replace 来制作分隔符:

SET @xmlstr  = 
  SELECT CAST('<file><row>' + REPLACE(COMMENT,CHAR(13)+CHAR(10),'</row><row>') + '</row></file>' AS XML)
  FROM PERMIT A
  INNER JOIN PROCESS G ON A.CODE = G.CODE 

然后从 XML 中选择所需的行

SELECT line.a_row
FROM    @xmlstr.nodes('/file') AS line(a_row)
WHERE right(line.a_row,1) = '+'

您可以在此网站和网络上找到许多使用此技巧(转换为 xml 以帮助解析)的示例。


推荐阅读