Преобразование разных форматов дат в единый формат - PullRequest
0 голосов
/ 13 мая 2019

В моем приложении клиент может предоставить дату в любых форматах, и я должен отображать данную дату только в формате dd/mm/yyyy. Форматы даты следующие: *

1. dd-mmm-yyyy (Ex- 21-Jan-2019)
2. dd/mm/yyyy (Ex- 02/03/2019)
3. mm/dd/yyyy (Ex- 04/23/2019)
4. dd.mm.yyyy (Ex- 08.02.2019)
5. dd mmmm yyyy (Ex- 13 March 2019)
6. yyyy-mm-dd (Ex- 2019-03-04)
7. mmmm dd, yyyy (Ex- January 23, 2019)

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

Ответы [ 3 ]

1 голос
/ 13 мая 2019

Уже упоминалось, что ваши варианты (2) и (3) представляют собой экзистенциальную проблему для решения этой проблемы.Таким образом, этот ответ игнорирует эту проблему.

SQL Server довольно хорошо разбирается в датах.Итак, вы можете попробовать:

select try_convert(date, col)

Это вернет NULL значения для неизвестных форматов даты.Вы также можете искать конкретные форматы:

select coalesce(try_convert(date, col),
                try_convert(date, col, 101),
                try_convert(date, col, 104),
                try_convert(date, col, 120),
                . . .
               )

Выражения могут быть более сложными, чем try_convert(), если вам нужно изменить значение строки перед попыткой преобразования.

0 голосов
/ 13 мая 2019

При чтении этих счетов вы не можете найти код страны и вместо того, чтобы устанавливать правила для каждого поставщика, составлять правила по стране?

SELECT CONVERT(VARCHAR(n), GETDATE(), style) 

Стиль Стандарт

  • 100 По умолчанию для datetime и smalldatetime
  • 110 США
  • 111 ЯПОНИЯ
  • 112 ISO

https://tableplus.io/blog/2018/09/sql-server-date-format-cheatsheet.html

0 голосов
/ 13 мая 2019

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

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

Возможно, у вас может быть правило, по которому клиенты отправляют даты в каком формате, если вы вводите какое-то имя / идентификатор клиента в базу данных, а затем можете выполнить строковое значение с помощью функции преобразования даты, которая будет с учетом конкретного клиента или группы клиентов, но даже в этом случае вы должны были бы верить, что со временем это не изменится.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...