Рейтинг:0

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

флаг us

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

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

Мне нужно это в ПРЕДСТАВЛЕНИИ, поэтому я не могу использовать SET LANGUAGE. Звучит просто, используя конвертировать и исдата но, похоже, не работает.

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

создать таблицу dateTest1 
(внутренний идентификатор, 
 dateStringTest varchar (15) 
); 
  
вставить в dateTest1 (idx, dateStringTest) 
значения (1, '01.13.2021'), (2, 'нет'); 
 
 
Выбрать 
       случай, когда isdate(convert(datetime, dateStringTest, 103)) = 1 
       затем конвертировать (datetime, dateStringTest, 103)
       иначе dateStringTest 
       конец как dtres
с датыTest1 
--где IDx = 1 
  
-- ошибка: сообщение 241, уровень 16, состояние 1, строка 15 Преобразование не удалось при преобразовании даты и/или времени из символьной строки. 
-- эта ошибка возникает для idx = 2. Idx = 1 работает нормально

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

заранее спасибо Павел

Рейтинг:1
флаг cn

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

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

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

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

Парсинг произвольного текста наверное лучше всего сделать в вашем приложении, извлекая значение даты, проверяя и "отформатировав" его, а затем сохраняя его.

Michael Hampton avatar
флаг cz
Старайтесь не отвечать на вопросы не по теме.
Phill  W. avatar
флаг cn
Ответить на вопрос - это одно. Часто может быть лучше направлять плакат, чтобы задать вопрос, потому что они могут пытаться решить /неправильную/ проблему. Я не считаю отвлечение людей от [откровенно] Плохих Привычек, которые /вернутся/ и укусят их позже, как «не по теме». Обработка даты достаточно сложна, когда вы знаете, что работаете с датой. Добавление «если», «но» и «может быть» о том, является ли то, что вы ищете, датой или нет, сведет вас и вашу базу данных с ума.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.