【问题标题】:SQL Server Select LIKE Regex Equivalent to '?' or '\\s*'SQL Server Select LIKE Regex 等效于“?”或'\\s*'
【发布时间】:2017-12-09 08:38:08
【问题描述】:

我有一个简短的问题,在 SQL Server SELECT LIKE 正则表达式中是否有与 ? 等效的内容?

我尝试从 SQL Server 2012 的表中选择数据。列中的示例数据

...
<SOMETHING>
    <UNINTERESTING>test</UNINTERESTING>
    <INTERESTING>searchedString</INTERESTING>
    <SOMEMORE>
       <PROBLEMHERE>searchedString</PROBLEMHERE>
    </SOMEMORE>
...

...
<SOMETHING>
    <UNINTERESSTING>test</UNINTERESSTING>
    <INTERESING>searchedString but nevertheless wrong</INTERESTING>
    <SOMEMORE>
       <PROBLEMHERE>searchedString</PROBLEMHERE>
    </SOMEMORE>
...

我可以用

选择这些
LIKE '%<INTERESING>searchedString</INTERESTING>%'

一切正常,但&lt;INTERESTING&gt; 之间的值有时会以一个或多个空格结尾

例如

<INTERESING>searchedString </INTERESTING>
<INTERESING>searchedString         </INTERESTING>

如果我尝试使用% 进行选择,那么我得到了行,在这些行中找到了搜索字符串,但不在有趣或两个有趣之间,或者我得到了错误的行,例如

<INTERESING>searchedString but nevertheless wrong</INTERESTING>

我尝试使用_%[ ] 进行选择,但它们都没有让我得到正确的行。

在 SQL Server LIKE 正则表达式中是否有等效的 ?(无或一次性) 或任何类似 \s* (空格,可以是无,一次或多次)

提前致谢

最好的问候

【问题讨论】:

    标签: sql-server regex select sql-server-2012


    【解决方案1】:

    由于您的问题是空格...只需替换/删除这些,您的 like 语句应该可以工作,您可以避免其他解析和担心 REGEX。

    where replace(column,' ','') like'%&lt;INTERESING&gt;searchedString&lt;/INTERESTING&gt;%'

    如果您期望TABNEWLINE,则使用替换和CHAR(10)CHAR(13)

    where replace(replace(replace(column,' ',''),char(10),''),char(13),'') like'%&lt;INTERESING&gt;searchedString&lt;/INTERESTING&gt;%'

    【讨论】:

    • 没有汗水@Hans.Olo
    【解决方案2】:

    SQL Like Regex 中是否有等价物

    没有。您应该使用 SQL Server 的 XQuery 解析 XML 并提取 XML 元素值,然后然后使用 LIKE 来检查元素值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-05-01
      • 2014-09-02
      • 2018-05-06
      • 1970-01-01
      • 1970-01-01
      • 2013-10-07
      • 2018-11-20
      相关资源
      最近更新 更多