Sql MSG 537:传递给LEFT或SUBSTRING函数的长度参数无效

Sql MSG 537:传递给LEFT或SUBSTRING函数的长度参数无效,sql,sql-server,Sql,Sql Server,在sql server 2012中创建函数时,在此函数中 CREATE FUNCTION howords (@str nvarchar(50), @word nvarchar(50)) RETURNS int AS BEGIN DECLARE @tempstr nvarchar(max) DECLARE @space int DECLARE @count int DECLARE @size int SET @count = 0 WHILE (LEN(@str) >=

在sql server 2012中创建函数时,在此函数中

CREATE FUNCTION howords (@str nvarchar(50), @word nvarchar(50))
RETURNS int
AS
BEGIN
  DECLARE @tempstr nvarchar(max)
  DECLARE @space int
  DECLARE @count int
  DECLARE @size int
  SET @count = 0
  WHILE (LEN(@str) >= 0)
  BEGIN
    SET @space = CHARINDEX(' ', @str, 1)
    SET @tempstr = LEFT(@str, (@space - 1))
    IF (@tempstr = @word)
      SET @count = @count + 1
    SET @size = LEN(@tempstr)
    IF (((LEN(@str)) - @space) > 0)
      SET @str = SUBSTRING(@str, @space + 1, ((LEN(@str)) - @space))
    IF (((LEN(@str)) - @space) <= 0)
    BEGIN
      IF (@str = @word)
        SET @count = 0
      WHILE (LEN(@str) > 0)
      BEGIN
        SET @space = CHARINDEX(' ', @str + 1)
        SET @tempstr = LEFT(@str, (@space - 1))
        IF (@tempstr = @word)
          SET @count = @count + 1

        SET @size = LEN(@tempstr)
        IF (((LEN(@str)) - @space) > 0)
          SET @str = SUBSTRING(@str, @space + 1, ((LEN(@str)) - @space))
        IF (((LEN(@str)) - @space) <= 0)
        BEGIN
          IF (@str = @word)
            SET @count = @count + 1
          BREAK
        END
      END
    END
  END
  RETURN @count
END
创建函数howords(@str-nvarchar(50),@word-nvarchar(50))
返回整数
作为
开始
声明@tempstr nvarchar(最大值)
声明@space int
声明@countint
声明@size int
设置@count=0
而(LEN(@str)>=0)
开始
设置@space=CHARINDEX(“”,@str,1)
设置@tempstr=LEFT(@str,(@space-1))
IF(@tempstr=@word)
设置@count=@count+1
设置@size=LEN(@tempstr)
如果(((LEN(@str))-@space)>0)
设置@str=SUBSTRING(@str,@space+1,((LEN(@str))-@space))
IF(((LEN(@str))-@space)0)
开始
设置@space=CHARINDEX(“”,@str+1)
设置@tempstr=LEFT(@str,(@space-1))
IF(@tempstr=@word)
设置@count=@count+1
设置@size=LEN(@tempstr)
如果(((LEN(@str))-@space)>0)
设置@str=SUBSTRING(@str,@space+1,((LEN(@str))-@space))
如果(((LEN(@str))-@space)试试这个

DECLARE @tosearch VARCHAR(MAX)='Hello'  
DECLARE @string VARCHAR(MAX)='hello my hello'  

SELECT (DATALENGTH(@string)-DATALENGTH(REPLACE(@string,@tosearch,'')))/DATALENGTH(@tosearch)  
AS OccurrenceCount  

如果你解释函数应该做什么,那么可能有一种更简单的方式来表达逻辑。我想告诉我str中有多少个单词,比如当我发送给函数“hello hello world”,“hello”函数必须返回2个单词,如果一个单词在空格之间(或在开始或结束处),那么它必须被计数吗?即is
howords('rosetta','set')
0?此外,除了空格之外,还有什么标点符号需要担心吗?可能会重复-