За каждую часть вашего вопроса ...
Соответствие шаблону даты
Вы можете использовать [0-9] для указания диапазонов.
Так что для 99-99-9999
у вас будет
LIKE '[0-9][0-9]-[0-9][0-9]-[0-9][0-9][0-9][0-9]'
Для дат вы также можете использовать ISDATE или подобные вещи для дальнейшего ограничения
LIKE '[0-1][0-9]-[0-3][0-9]-2[0-9][0-9][0-9]'
Фильтры столбцов
Эти условия никогда не могут быть истинными, потому что они все на o.name
o.name = 'orders'
и
cast(o.name as varchar) like '%-%-%'
cast(o.name as varchar) like 'P%'
Последние 2 должны быть на c.name
в вашем запросе
Наконец
Используйте более новые sys.columns и sys.objects. Или INFORMATION_SCHEMA.COLUMNS, что, вероятно, лучше всего здесь