2014-11-14 3 views
0

У меня есть таблица, в которой я пытаюсь найти повторяющиеся строки, используя Common Table Expression. Поля, которые я, работающие с заключаются в следующих:CTE не возвращает ожидаемые значения

LogTime (ТипДанный: datetime2 (7), нулевой) ControllerIP (ТипДанный: nvchar (макс), нулевой)

У меня есть две строк данных, которые имеют насколько я могу судить. Я проверил LEN на обоих столбцах, чтобы убедиться, что они равны по длине, но строки не возвращаются как дубликаты при использовании CTE ниже. Есть ли что-то другое, что мне нужно сделать с столбцом LogTime? Я никогда не сталкивался с этим.

WITH CTE AS 
(
SELECT rn = ROW_NUMBER() 
      OVER( 
       PARTITION BY LogTime , ControllerIP 
       ORDER BY Id ASC), * 
FROM [DownTime].[dbo].[Records] 
) 
SELECT * FROM cte 
WHERE FileName = '141101.CSV' AND rn > 1 
Order By ID 
GO 

Кроме того, я использую Microsoft SQL Server 2008R2.

+0

'LEN' не учитывает конечные пробелы (и других не печатаемых символов), поэтому 2 значения с одинаковой Len и что выглядит так же, не означает, что они имеют одни и те же данные – Lamak

+1

Логически, ваш стратегия поиска дубликатов звучит. Либо LogTime, либо ControllerIP должны быть разными. –

+0

Хорошо. Я так и думал. Я буду google, как это сделать и спуститься по этому пути. –

ответ

1

Ваш план звучит. Если вы не находите дубликаты, это потому, что дубликатов не существует. Вы можете применить некоторые функции к столбцам, чтобы сделать поиск дубликатов более вероятным, например, обрезать пробелы из IP и снизить точность datetime2.

WITH CTE AS (
    SELECT rn = ROW_NUMBER() OVER( 
     PARTITION BY CAST(LogTime AS datetime2(2)), RTRIM(LTRIM(ControllerIP)) 
     ORDER BY Id ASC), * 
    FROM [DownTime].[dbo].[Records] 
) 
SELECT * FROM cte 
WHERE FileName = '141101.CSV' AND rn > 1 
Order By ID 
+0

Способ, которым я в конечном итоге получил это, - это запустить мои объекты с помощью консольного приложения C#. Я использовал метод string.trim() для каждого объекта и сохранил его обратно в базу данных. Это очистило данные, и я начал видеть дубликаты, где я ожидал. –

Смежные вопросы