任何人都可以帮我解决如何从多个逗号分隔值中检查重复值的问题。我有一个客户表,其中一个可以插入多个逗号分隔的联系号码,我想检查最后五位数的重复值。参考检查截图附加和所需的输出是 联系方式。计数 97359506775 - 2 390558073039-- 1 904462511251-- 1
答案 0 :(得分:1)
如果可能,我建议您重新设计数据库架构。您当前的数据库违反了First Normal Form,因为您的属性值不是不可分割的。
创建一个表格,其中id和单个电话号码构成一个键,此约束强制执行不会发生重复。
答案 1 :(得分:0)
我不记得太多,但我会尝试提出这个想法(这是我很久以前用过的东西):
该功能将是这样的:
CREATE FUNCTION udf_PhoneNumbers
(
@Id INT
,@Phone VARCHAR(300)
) RETURNS @PhonesTable TABLE(Id INT, Phone VARCHAR(50))
BEGIN
DECLARE @CommaIndex INT
DECLARE @CurrentPosition INT
DECLARE @StringLength INT
DECLARE @PhoneNumber VARCHAR(50)
SELECT @StringLength = LEN(@Phone)
SELECT @CommaIndex = -1
SELECT @CurrentPosition = 1
--index is 1 based
WHILE @CommaIndex < @StringLength AND @CommaIndex <> 0
BEGIN
SELECT @CommaIndex = CHARINDEX(',', @Phone, @CurrentPosition)
IF @CommaIndex <> 0
SELECT @PhoneNumber = SUBSTRING(@Phone, @CurrentPosition, @CommaIndex - @CurrentPosition)
ELSE
SELECT @PhoneNumber = SUBSTRING(@Phone, @CurrentPosition, @StringLength - @CurrentPosition + 1)
SELECT @CurrentPosition = @CommaIndex + 1
INSERT INTO @UsersTable VALUES(@Id, @PhoneNumber)
END
RETURN
END
然后运行CROSS APPLY查询:
SELECT
U.*
,UD.*
FROM yourtable U CROSS APPLY udf_PhoneNumbers(Userid, Phone) UD
这将为您提供可以运行查询以查找副本的表。