#sql #sql-server
#sql #sql-сервер
Вопрос:
У меня есть таблица базы данных, чей ETL-процесс и содержимое, которые я не могу изменить, со nvarchar
столбцом, который в основном состоит из строк даты и null. Тем не менее, иногда появляются ‘N / A’ или ‘Не принято’.
Есть ли способ получить только те значения, которые являются допустимыми строками даты?
ВВОД:
2019-01-01
N/A
null
2019-03-04
ВЫВОД
2019-01-01
2019-03-04
Комментарии:
1. ПОПРОБУЙ РАЗОБРАТЬ? learn.microsoft.com/en-us/sql/t-sql/functions /…
2. Обратите внимание, что при этом не используется индекс, не подлежащий проверке. ПЛОХАЯ производительность. Сработал бы Try_parse в функции для поля, которое затем индексируется.
3. Давайте не будем ходить вокруг да около, хотя исправление самих данных (изменение их на
date
) является реальным решением здесь. Оба приведенных вами примера имеют форматyyyy-MM-dd
, но я бы не удивился, что у вас есть такие значения, как01/02/03
, и вам будет больно, если это так.4. @Larnu Я согласен, но это сторонняя база данных, и они уже сказали мне, что не будут ее исправлять.
5. «Не буду» не означает «не должен» или «не могу». Я бы лично настаивал на том, чтобы третья сторона исправила это; это не «особенность», это ошибка, и в связи с этим я бы обратился в службу поддержки.
Ответ №1:
Простой способ использует try_cast()
или try_convert()
:
select t.*
from t
where try_cast(datecol as date) is not null;