конвертировать строковую дату с 3 символами месяца - PullRequest
0 голосов
/ 10 мая 2019

У меня есть столбец varchar в БД с датами.В C # с помощью SQL Select я пытаюсь преобразовать строку (пример: '10 апреля 2009 г.) (MMM-dd-гггг) в дату и время, но дает:

varcharтип данных для типа данных datetime привел к значению, выходящему за пределы допустимого диапазона.

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

Примечание. Это старая устаревшая БД, которую я унаследовал.Я был поражен плохим выбором типов полей varchar для этих значений даты вместо datetime.

SELECT convert(datetime, dbo.EffectiveDate, 100) from Employees

или

SELECT convert(datetime, dbo.EffectiveDate) from Employees

происходит из примера: SELECT convert(datetime, 'Oct 23 2012 11:01AM', 100)

или

SELECT convert(datetime, 'Oct 23 2012 11:01AM')

, хотя значения полей не включают временную часть, я попробовал их

Таблица сотрудников:

Поле EffectiveDate varchar

12.12.2006

24 октября 2006 г.

..

..

и т. Д.

Есть предложения?

Ответы [ 2 ]

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

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

https://en.wikipedia.org/wiki/ISO_8601

например

SELECT convert(datetime, '2012 Oct 23  11:01AM')
0 голосов
/ 11 мая 2019

Я бы так и сделал.То есть, если все столбцы даты varchar соответствуют следующему формату: (MMM-dd-гггг)

select convert(datetime,convert(date, replace('Apr-10-2009', '-', ' '))) 

Выводы: 2009-04-10 00: 00: 00.000

...