Это для SQL Server: я бы предложил использовать функцию ISDATE для проверки входных данных, затем приведите их, если это правильный формат даты, то следует выполнить приведение и проверить промежуток между заданной датой.Вы можете использовать строку для проверки даты или нет.Приведенный ниже код просто для того, чтобы дать вам представление о том, как вы можете проверять и разыгрывать соответственно.если вы предоставите временную таблицу с данными и типом столбца, тогда фактический результат может быть достигнут.
declare @install_date datetime= '2019-03-01'
select CAST(IIF(ISDATE(@install_date) = 1,@install_date,'1900-01-01') as Date)
go
declare @install_date varchar(10)= '2019-23-01'
select CAST(IIF(ISDATE(@install_date) = 1,@install_date,'19000101') as Date)
go
declare @install_date varchar(100)= 'string not a date'
select CAST(IIF(ISDATE(@install_date) = 1,@install_date,'19000101') as Date)