我想使用like
运算符检查表格中的重复值:
select F_Barcode, COUNT(*) as cnt
from T_Assets
group by F_Barcode
having COUNT(*) > 1
这工作正常,但我的一些条形码重复就像这样
4456
00004456
和
45552
00045552
实际上这是相同的条形码,但重复。
我需要看到我的所有条形码都像这样重复吗?我怎么能这样做?
F_Barcode datatype nvarchar(50).
0000frdz
之类的值无法转换为数据类型int。
答案 0 :(得分:1)
您可以将条形码的类型转换为整数,然后执行计数操作。 就像这样:
select F_Barcode,COUNT(*) as cnt From T_Assets
group by CAST(F_Barcode AS UNSIGNED) having COUNT(*) > 1
答案 1 :(得分:0)
检查这个。
使用子字符串:
select substring(F_Barcode, patindex('%[^0]%',F_Barcode), 100),
COUNT(*) as cnt
From T_Assets
group by substring(F_Barcode, patindex('%[^0]%',F_Barcode), 100)
having COUNT(*) > 1
--- Replace 100 with datatype size
使用演员:
select CAST(F_Barcode as int),COUNT(*) as cnt
From F_Barcode
group by CAST(F_Barcode as int)
having COUNT(*) > 1
答案 2 :(得分:0)
然后收集计数组。
选择RIGHT('000000000'+ F_Barcode,9)作为F_Barcode,COUNT()作为cnt 来自T_Assets 右边分组('000000000'+ F_Barcode,9) 有COUNT()> 1
这里我认为字符串长度为9.您可以根据您的要求进行调整。 请注意,您必须在列的开头添加相等数量的0到字符串长度。
答案 3 :(得分:0)
SQL Server 2012或更高版本的可能解决方案是使用for (int i = 0; i < listBox1.Items.Count; i++)
{
listBox2.Items.Add(listBox1.Items[i]);
}
listBox1.Items.Clear();
来确保转换永远不会失败。条形码应仅包含数字,但由于您将它们存储在TRY_CONVERT
字段
<强>设置强>
NVARCHAR
<强>查询强>
create table BarcodeData
(
F_Barcode NVARCHAR(50)
)
insert into BarcodeData VALUES ('4456'), ('00004456'), ('45552'), ('00045552'), ('a45552'), ('1234'), ('0'), ('00001'), ('a45552')
GO