
Это действительно сбивает меня с толку на несколько дней, и я ищу помощи. Я использую 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 немного "неуклюжи", по сравнению с некоторыми другими.
Однако с точки зрения вашей базы данных:
Если что-то естьпредполагаемыйбытьДата, Затем этодолжно бытьдата.
Она может быть "отсутствующей" (т.е. обнуляемой), но не может быть ничем другим.
Если онабылибыть чем-то другим, то это не должно рассматриватьсякакаДата.
Пользователи не могут войтиДаты- толькоПредставления персонажейиз них.
Отображение [чисел и] дат из вашего приложения требует форматирования на "выходе".
Чтение [чисел и] дат в ваше приложение требует обратного, "деформатирования" (и проверки, конечно) на "входе".
Данные должнывсегдахраниться вправильныйТип данных — «Нужный инструмент для нужной работы».
Свободный текстовый анализвероятнолучше всего сделать это в вашем приложении, извлекая значение даты, проверяя и «деформатируя» его, а затем сохраняя.