sql - 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 函数的长度参数无效。
有什么帮助吗?
解决方案
试试这个
DECLARE @tosearch VARCHAR(MAX)='Hello'
DECLARE @string VARCHAR(MAX)='hello my hello'
SELECT (DATALENGTH(@string)-DATALENGTH(REPLACE(@string,@tosearch,'')))/DATALENGTH(@tosearch)
AS OccurrenceCount
推荐阅读
- html - 用单张图片替换背景图片,效果一样
- r - R 参考类和分层数据
- python - Web 刮板仅在我打开要刮的网页后的几分钟内工作
- nativescript - Web 视图中的资源链接?
- lua - Roblox Studio - 错误:统计信息不是工具的有效成员
- asp.net - 使用 Dapper,如何将 sql 类型的值作为参数传递?
- html - 正在显示的 CSS 子菜单 google maps 脚本
- android - 我不知道什么时候应该在 Android 中使用 log.d() 和 log.w() 方法
- nginx - 位置不适用于文件,但仅适用于路径
- objective-c - 无法从objective-c接口访问swift方法