我遇到了一个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)
答案 0 :(得分:2)
official documentation of PATINDEX
指出:
模式
是包含要查找的序列的字符表达式。可以使用通配符;但是,%
字符必须位于模式之前和之后(除非您搜索第一个或最后一个字符)
%
通配符表示,
如official documentation for LIKE
中所述:
任何零个或多个字符的字符串。
它可以代表任意数量的字符(包括零),这意味着%%
完全等同于%
,并且可以安全地更改。
请注意,其他任何T-SQL通配符都不是这种情况-因为_
代表单个字符,以及[]
和[^]
。