一些T-SQL函数如何知道在输入参数中接受通配符?

时间:2014-04-03 17:50:49

标签: sql-server tsql

T-SQL函数的哪些属性(如PATINDEX)允许它接受模式参数中的通配符?我问,因为有些函数,例如LEN,它们不接受通配符。例如:

SELECT LEN('[TML]IME')
SELECT DATALENGTH('[TML]IME')

两者都返回8,即使任何遵循这种通配符序列的字符串总是4个字符长。我的直觉说,函数内部的一些切换是强制将字符串视为文字,但我试图找到这样的文档失败了。这里发生了什么?

1 个答案:

答案 0 :(得分:3)

如果你只是用'[TML]IME'语法来说话,那么这只是函数用它做的事情。这不是输入参数的问题。 PATINDEX处理非常基本的类似RegEx的方括号,因为这是PATINDEX函数的代码所做的。

LENDATELENGTH函数除了测量传入的字符串的长度外,不会做任何其他事情。

不应该假设将字符串传递给函数意味着它将以与PATINDEX和LIKE运算符相同的方式进行解析。

现在,有些函数会将*通配符表示“所有字段”,例如CHECKSUMBINARY_CHECKSUM,这与T-之间的API有关SQL和我认为用C ++编写的内部函数可以处理重载(相同的函数名但输入参数不同),T-SQL或SQLCLR函数中不允许这样做。

相关问题