首页 > 解决方案 > MSG 537:传递给 LEFT 或 SUBSTRING 函数的长度参数无效

问题描述

当我在 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

当我执行这个查询

选择 dbo.howords ('hello my hello','hello' )

我想给我计数(2),但它给了我一个错误

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

有什么帮助吗?

标签: sqlsql-server

解决方案


试试这个

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

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

推荐阅读