希望这似乎不太简单。我看了这个,但我不太擅长SQL用户定义的函数及其使用,所以我不确定发生了什么。为了告诉我为什么会收到错误,谁会幻想几点:
在上下文中指定的非布尔类型的表达式 条件是预期的,接近')'。
为此:
UPDATE LMI_Contact
SET Phone = NULL
WHERE dbo.LMI_IsSingleCharacterRepeated(Phone, '0')
可以使用以下方法创建函数:
-- ***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
此函数用于检查字符串是否是任何指定的单个字符,重复。希望有人发现它有用!
答案 0 :(得分:20)
即使返回类型为bit
,您也必须对函数使用比较运算符。
UPDATE LMI_Contact
SET Phone = NULL
WHERE dbo.LMI_IsSingleCharacterRepeated(Phone, '0') = 1
答案 1 :(得分:4)
试试这个
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
答案 2 :(得分:4)
您需要将查询的where子句修改为:
UPDATE LMI_Contact
SET Phone = NULL
WHERE dbo.LMI_IsSingleCharacterRepeated(Phone, '0') = 1