Давайте сделаем это очень просто: 2 столбца, id и textDate.
Для некоторых строк поле textDate будет содержать значение null, что нормально, иногда оно может содержать что-то вроде «2017-06-24», что тоже нормально.
Но для некоторых строк (и это должно было быть проверено до того, как дошло до этой точки) поле будет содержать «Значение, помещенное туда для усложнения ситуации».
Я хочу знать, какая строка не равна нулю и не соответствует формату «гггг-мм-дд».
Я искал, но он настолько специфичен, что мой поиск ни к чему не привел.
... и хранить даты, используя, я не знаю, тип данных date. Это то, для чего это нужно, и избавляет вас от необходимости что-либо проверять. :-)
Выберите * из YourTable, где try_convert(date,textDate) имеет значение null, а textDate не имеет значения null.
Если вы хотите, чтобы дата была в одном конкретном формате, yyyy-mm-dd, а не dd/mm/yyyy или mm/dd/yyyy, вам следует включить код стиля даты и времени в свой вызов try_convert, например: try_convert(date, textDate, 23) is null -- find invalid values Ссылка: Стили даты и времени
@AaronBertrand Я бы сам не допустил этой ошибки, предыдущие разработчики PHP допустили массу ошибок, и мне нужно их исправить.
Спасибо @JohnCappelletti, это именно то, что мне нужно.


Для этого вы можете использовать ISDATE():
-- Create a table for the dummy data
create table #data
(
id int,
textDate varchar(100)
)
-- Add some dummy values to the table
insert into #data values
(1, NULL),
(2, '2017-06-24'),
(3, 'A value placed there to complicate things')
-- Return records which aren't valid dates (or NULL)
select
*
from #data
where isdate(textDate) = 0 and textDate is not null
drop table #data
Как упоминалось в комментариях, вы также можете рассмотреть TRY_CAST() или TRY_CONVERT(), если хотите.
проверьте
TRY_CASTLearn.microsoft.com/en-us/sql/t-sql/functions/…