sql-server - Sql中的重复验证

标签 sql-server

我有一个包含两列的表,我在其中检查重复项。我为重复项编写了代码,它是

        DbCommand cmd = db.GetSqlStringCommand("SELECT MyTable.* FROM MyTable. INNER JOIN(SELECT MainUrl, COUNT(*) as counter FROM MyTable GROUP BY MainUrl HAVING COUNT(*) >1) t ON t.MainUrl=MyTable.MainUrl");
        int count = db.ExecuteNonQuery(cmd);
        DataSet ds = db.ExecuteDataSet(cmd);
        return ds;

而在我的专栏中,我有 Amazon.com,http://Amazon.com,https://Amazon.com.I甚至想要这两个重复项。我想用这些重复项返回表中的所有列。但是从我的代码中我无法实现这一点,谁能帮我解决这个问题

最佳答案

使用 CHARINDEXSUBSTRING :

它认为 'amazon.com' , http://amazon.com' , 和 https://amazon.com'作为重复。

WITH MyTable(OriginalURL) AS(
    SELECT 'http://Amazon.com' UNION ALL
    SELECT 'https://Amazon.com' UNION ALL
    SELECT 'Amazon.com' UNION ALL
    SELECT 'http://Stackoverflow.com' UNION ALL
    SELECT 'Stackoverflow.com' UNION ALL
    SELECT 'http://google.com'
)
SELECT 
    CASE 
        WHEN CHARINDEX('http://', OriginalURL, 1) > 0 THEN SUBSTRING(OriginalURL, 8, LEN(OriginalURL) - 7) 
        WHEN CHARINDEX('https://', OriginalURL, 1) > 0 THEN SUBSTRING(OriginalURL, 9, LEN(OriginalURL) - 8) 
        ELSE OriginalURL
    END AS OriginalURL
    , COUNT(*) AS DupeCount
FROM MyTable
GROUP BY
    CASE 
        WHEN CHARINDEX('http://', OriginalURL, 1) > 0 THEN SUBSTRING(OriginalURL, 8, LEN(OriginalURL) - 7) 
        WHEN CHARINDEX('https://', OriginalURL, 1) > 0 THEN SUBSTRING(OriginalURL, 9, LEN(OriginalURL) - 8) 
        ELSE OriginalURL
    END
HAVING COUNT(*) > 1

关于sql-server - Sql中的重复验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30161760/

相关文章:

sql - System.Data.SqlClient 和 SQLNCLI10.1 提供程序之间有什么区别?

SQL - 字符串比较忽略空格

mysql - 在数据库中存储 100K 个不同的表

sql - 什么是sql server中的 'where 1=1'和 'where null=null'

mysql - 将 MSSQL 表转换为 MySQL 表

SQL查询信息*不在数据库中*

sql-server - 更改现有 VIEW 的 SCHEMABINDING

sql - sql server如何使用管道字符进行排序

sql - 从 SQL 列中选择特定字符

sql - if 存储过程中的情况