Chr*_*row 18 sql boolean function where-clause sql-server-2008-r2
希望这似乎不太简单.我已经看了这个,但我不太擅长SQL用户定义的函数及其使用,所以我不确定发生了什么.为了告诉我为什么我收到错误,他们想了几点:
在期望条件的上下文中指定的非布尔类型的表达式,在')'附近.
为了这:
UPDATE LMI_Contact
SET Phone = NULL
WHERE dbo.LMI_IsSingleCharacterRepeated(Phone, '0')
Run Code Online (Sandbox Code Playgroud)
可以使用以下方法创建函数:
-- ***this will also find NULL and empty string values***
CREATE FUNCTION LMI_IsSingleCharacterRepeated (@string varchar(max), @char char(1))
RETURNS bit
AS
BEGIN
DECLARE @index int
DECLARE @len int
DECLARE @currentChar char(1)
SET @index = 1
SET @len= LEN(@string)
WHILE @index <= @len
BEGIN
SET @currentChar = SUBSTRING(@string, @index, 1)
IF @currentChar = @char
SET @index= @index+ 1
ELSE
RETURN 0
END
RETURN 1
END;
GO
Run Code Online (Sandbox Code Playgroud)
此函数用于检查字符串是否是任何指定的单个字符,重复.希望有人发现它有用!
Tho*_*mas 23
即使返回类型是,也必须对函数使用比较运算符bit.
UPDATE LMI_Contact
SET Phone = NULL
WHERE dbo.LMI_IsSingleCharacterRepeated(Phone, '0') = 1
Run Code Online (Sandbox Code Playgroud)
尝试这个
CREATE FUNCTION LMI_IsSingleCharacterRepeated (@str varchar(max), @char char(1))
RETURNS BIT
AS
BEGIN
DECLARE @indx int
DECLARE @len int
DECLARE @currentChar char(1)
SET @indx = 1
SET @len= LEN(@str)
WHILE @indx <= @len
BEGIN
SET @currentChar = SUBSTRING(@str, @indx, 1)
IF @currentChar = @char
SET @indx= @indx+ 1
ELSE
RETURN 0
END
RETURN 1
END;
GO
Run Code Online (Sandbox Code Playgroud)
您需要将查询的 where 子句修改为:
UPDATE LMI_Contact
SET Phone = NULL
WHERE dbo.LMI_IsSingleCharacterRepeated(Phone, '0') = 1
Run Code Online (Sandbox Code Playgroud)