使用like运算符重复检查

时间:2017-01-10 07:41:37

标签: sql sql-server

我想使用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。

4 个答案:

答案 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)

  1. 修复字符串的长度。
  2. 在开头添加O以匹配所需的长度。
  3. 然后收集计数组。

    选择RIGHT('000000000'+ F_Barcode,9)作为F_Barcode,COUNT()作为cnt 来自T_Assets 右边分组('000000000'+ F_Barcode,9) 有COUNT()> 1

  4. 这里我认为字符串长度为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