Похоже, вам нужно найти неверные данные.Мне тоже пришлось иметь дело с данными о дате и времени, хранящимися в столбце varchar.Может быть трудно отследить ошибочные данные.Сначала я открыл таблицу и посмотрел на нее в поисках неверно отформатированных дат, но не смог найти ни одной, поэтому решил, что их очень мало, и что было бы быстро использовать более программный подход.В конечном итоге я использовал подход «разделяй и властвуй»: я разделил данные пополам и попытался привести каждую половину к дате.Если какая-либо половина вызвала ошибку, то я далее разделил ее пополам и проверил эти половины.Это рекурсивный процесс.Я мог бы написать T-SQL для этого, но я сделал это вручную.Это заняло, возможно, полчаса.
Например, предположим, что MyTableName имеет ПЕРВИЧНЫЙ КЛЮЧ с именем MyID с последовательными значениями, начинающимися с 1 и заканчивающимися на 1000000. Затем я запускаю два запроса, чтобы проверить, какая половина (или половина)содержать недопустимые данные:
SELECT CAST(colDate AS DATETIME) WHERE MyID BETWEEN 1 AND 500000
GO
SELECT CAST(colDate AS DATETIME) WHERE MyID BETWEEN 500001 AND 1000000
GO
Если первый запрос вызвал ошибку, я бы запустил еще два запроса:
SELECT CAST(colDate AS DATETIME) WHERE MyID BETWEEN 1 AND 250000
GO
SELECT CAST(colDate AS DATETIME) WHERE MyID BETWEEN 250001 AND 500000
GO
Предположим, что в этой итерации только второй запрос вызвал ошибкуошибка.Затем я бы выполнил еще два запроса:
SELECT CAST(colDate AS DATETIME) WHERE MyID BETWEEN 250001 AND 375000
GO
SELECT CAST(colDate AS DATETIME) WHERE MyID BETWEEN 375001 AND 500000
GO
В конечном итоге - в итерациях log-base-2-of-n или менее - вы найдете первое ошибочное значение данных.Конечно, вы не знаете, сколько ошибочных значений содержится в вашей таблице, поэтому может потребоваться время, чтобы найти их все.В моем случае у меня было около 10 ошибочных значений, некоторые из которых были 'none' или 'NA' и которые я ОБНОВЛЕН был равен NULL, а некоторые из них были просто неправильно отформатированными датами, которые я ОБНОВИЛ, чтобы они были правильно отформатированы.Исправив неверные данные, я наконец смог вернуться к первоначальной задаче анализа данных.