Наиболее важный ответ был дан EzLo в комментарии выше: не храните значения даты / времени в строковом формате.
Собственный тип даты / времени хранится в нечитаемом двоичном шаблоне,Любое действие будет быстрее и безопаснее от зависимости от культуры.
Читаемый формат предназначен только для вывода и должен выполняться в экспорте или на уровне презентации.
Если вам нужно придерживатьсяэто (или если это ваша попытка очистить и преобразовать ваши данные в правильный формат), я бы предложил один из них:
SELECT *
FROM #tempdate
- либо используйте текстовый базовый шаблон
WHERE LEFT(dateCol,10) NOT LIKE '[1,2][0-9][0-9][0-9]-[0,1][0-9]-[0-3][0-9]';
- или использовать фиксированный формат преобразования (здесь я использую 126 для ISO8601)
WHERE TRY_CONVERT(date,dateCol,126) IS NULL