T-SQL PATINDEX中双百分号(%%)的意义

时间:2018-09-07 22:12:26

标签: sql sql-server tsql

我遇到了一个T-SQL的遗留部分,它使用类似于以下内容的PATINDEX从文本列中提取日期:

CAST(SUBSTRING(MyText, PATINDEX('%%-[0-1][0-9]/[0-3][0-9]/[0-9][0-9]%%', DocumentHeaderText)+1, 8) AS DATE)

我看不到通配符字符串开头和结尾出现双百分号的原因,从谷歌搜索到PATINDEX documentation来看,似乎没有双百分号起作用超过一个百分号。

但是,我之前一直急于“改进”旧版代码,发现原来的作者有充分的理由对其所做的工作提出困难的意见,不得不将其改回。

所以我的问题是,对于T-SQL LIKE或PATINDEX语句,通配符字符串中的%%%之间是否有区别?我可以安全地更改代码而无需将行为更改为:

CAST(SUBSTRING(MyText, PATINDEX('%-[0-1][0-9]/[0-3][0-9]/[0-9][0-9]%', DocumentHeaderText)+1, 8) AS DATE)

1 个答案:

答案 0 :(得分:2)

official documentation of PATINDEX指出:

  

模式
  是包含要查找的序列的字符表达式。可以使用通配符;但是,%字符必须位于模式之前和之后(除非您搜索第一个或最后一个字符)

%通配符表示, 如official documentation for LIKE中所述:

  

任何零个或多个字符的字符串。

它可以代表任意数量的字符(包括零),这意味着%%完全等同于%,并且可以安全地更改。

请注意,其他任何T-SQL通配符都不是这种情况-因为_代表单个字符,以及[][^]