SQL检索具有特殊字符的字符串

SQL检索具有特殊字符的字符串,sql,sql-server,tsql,text,data-retrieval,Sql,Sql Server,Tsql,Text,Data Retrieval,我正在尝试编写一个查询,只选择末尾有“+”的值 这些值是用户从提供参考注释列表的屏幕中选择的文本片段。一段文本末尾可以有不同的特殊字符:“+”或“~”或“|” 这些值存储在单个列中,并且是混合的 对于这个任务,我只需要得到以“+”结尾的注释 以下是存储的文本示例: Addendum and/or contract providing additional event details and conditions.+ There are charges for these service

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

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

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

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

以下是存储的文本示例:

    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 <> ''   
选择
评论
从…起
准许
内连接
A.CODE上的进程G=G.CODE
哪里
右(注释2)='+'
和注释“”


非常感谢您的帮助。

所以我没有测试这个,它可能有拼写错误,但基本思想是将文本转换为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以帮助解析)的示例。

尝试
where注释(如“%\r%
)和
where注释(如“%\r
)-您的注释末尾可能有空格,这会弄乱您的右侧2。您是指
\r
吗“后跟小写r的反斜杠字符”,还是说“回车符,由许多C语言支持的
\r
转义序列表示?”"? 换句话说,你是直接在你的数据库中看到这些字符,还是在客户端代码中的某个地方逃脱了?@ APH,如果中间某处的IS\R很容易返回假阳性。右边的所有东西都只是噪声。注释怎么可能为空且长度不超过0?如果长度大于0,怎么可能是空字符串?我认为一个简单的“LIKE“%\r”将比所有这些东西更简单地替换整个where子句。但正如@jeroenmoster所指出的,您可能并不是在寻找那个字符串,而是在寻找char(10)或char(13)以及您发布的示例数据。这是一行数据,还是七行数据?你好,霍根,我最近几天生病,没有工作。我今天刚回来,将尝试一下你的推荐。谢谢你的帮助,我会报告我是否成功。致以最诚挚的问候。我正在尝试检索XML列的内容,但收到一条错误消息:无法直接使用从nodes()方法返回的列“a_row”。它只能用于四个XML数据类型方法之一,exist()、nodes()、query()和value(),或者用于IS NULL和IS NOT NULL检查。它返回的文本结尾带有“+”)。现在的问题是,我有3个句子有一个“+”和选择只返回第一个。您对此有何建议?“附录和/或提供额外活动细节和条件的合同”活动所需的特别值班员。这些服务是收费的。+通知商场工作人员活动的用电需求。+8'必须在整个活动区域的人行道上维护人行道。~在活动期间提供并维护通往酒店的通道。~活动组织者/赞助商负责清理活动区域。|'@erasmocarlos my select语句应返回所有3个
SELECT line.a_row
FROM    @xmlstr.nodes('/file') AS line(a_row)
WHERE right(line.a_row,1) = '+'