SQL Преобразование строк в дату

SQL Преобразование строк в дату

Это действительно сбивает меня с толку на несколько дней, и я ищу помощи. Я использую SQL Server 2017.

Я пытаюсь обработать строки из поля свободного формата и либо преобразовать их в дату в формате «дд/мм/гггг», либо, если они не в этом формате, просто отобразить текст дословно.

Мне это нужно в VIEW, поэтому не могу использовать SET LANGUAGE. Звучит просто, используяконвертироватьидатано похоже не работает.

Итак, для фрагмента кода ниже (помните, что это будет в VIEW) я хочу прочитать текст, и если строка преобразуется в дату (т. е. имеет формат «дд/мм/гггг», то запустить преобразование в дату, поскольку мне нужен формат даты для Excel (через базу данных Connect SQL Sever)), а если не преобразуется в дату, то отобразить текст как есть.

create table dateTest1 
( idx int, 
 dateStringTest varchar(15) 
); 
  
insert into dateTest1 (idx, dateStringTest) 
values (1, '13/01/2021'), (2, 'no'); 
 
 
select 
       case when isdate(convert(datetime, dateStringTest, 103)) = 1 
       then convert(datetime, dateStringTest, 103)
       else dateStringTest 
       end as dtres
from dateTest1 
--where idx = 1 
  
-- error: Msg 241, Level 16, State 1, Line 15 Conversion failed when converting date and/or time from character string. 
-- this error happens for idx = 2. Idx = 1 works ok

Любая помощь в этом вопросе будет высоко оценена, так как это сводит меня с ума.

Спасибо заранее, Пол.

решение1

Я не уверен, насколько хорошо ваша база данных подходит для этого. Функции преобразования данных в SQL Server немного "неуклюжи", по сравнению с некоторыми другими.

Однако с точки зрения вашей базы данных:

Если что-то естьпредполагаемыйбытьДата, Затем этодолжно бытьдата.
Она может быть "отсутствующей" (т.е. обнуляемой), но не может быть ничем другим.
Если онабылибыть чем-то другим, то это не должно рассматриватьсякакаДата.

Пользователи не могут войтиДаты- толькоПредставления персонажейиз них.
Отображение [чисел и] дат из вашего приложения требует форматирования на "выходе".
Чтение [чисел и] дат в ваше приложение требует обратного, "деформатирования" (и проверки, конечно) на "входе".
Данные должнывсегдахраниться вправильныйТип данных — «Нужный инструмент для нужной работы».

Свободный текстовый анализвероятнолучше всего сделать это в вашем приложении, извлекая значение даты, проверяя и «деформатируя» его, а затем сохраняя.

Связанный контент