Выберите идентификаторы строк, в которых столбец nvarchar не может преобразоваться в дату

Давайте сделаем это очень просто: 2 столбца, id и textDate.

Для некоторых строк поле textDate будет содержать значение null, что нормально, иногда оно может содержать что-то вроде «2017-06-24», что тоже нормально.

Но для некоторых строк (и это должно было быть проверено до того, как дошло до этой точки) поле будет содержать «Значение, помещенное туда для усложнения ситуации».

Я хочу знать, какая строка не равна нулю и не соответствует формату «гггг-мм-дд».

Я искал, но он настолько специфичен, что мой поиск ни к чему не привел.

проверьте TRY_CASTLearn.microsoft.com/en-us/sql/t-sql/functions/…

Patrick Hurst 15.09.2023 23:10

... и хранить даты, используя, я не знаю, тип данных date. Это то, для чего это нужно, и избавляет вас от необходимости что-либо проверять. :-)

Aaron Bertrand 15.09.2023 23:18

Выберите * из YourTable, где try_convert(date,textDate) имеет значение null, а textDate не имеет значения null.

John Cappelletti 15.09.2023 23:24

Если вы хотите, чтобы дата была в одном конкретном формате, yyyy-mm-dd, а не dd/mm/yyyy или mm/dd/yyyy, вам следует включить код стиля даты и времени в свой вызов try_convert, например: try_convert(date, textDate, 23) is null -- find invalid values Ссылка: Стили даты и времени

AlwaysLearning 16.09.2023 02:30

@AaronBertrand Я бы сам не допустил этой ошибки, предыдущие разработчики PHP допустили массу ошибок, и мне нужно их исправить.

Antoine Pelletier 18.09.2023 20:00

Спасибо @JohnCappelletti, это именно то, что мне нужно.

Antoine Pelletier 18.09.2023 20:12
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
6
50
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Для этого вы можете использовать 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(), если хотите.

Другие вопросы по теме