Sql MSG 537:传递给LEFT或SUBSTRING函数的长度参数无效
在sql server 2012中创建函数时,在此函数中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) >=
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个单词,如果一个单词在空格之间(或在开始或结束处),那么它必须被计数吗?即ishowords('rosetta','set')
0?此外,除了空格之外,还有什么标点符号需要担心吗?可能会重复-