in SQL Сервер
03MAR2020: 02: 45: 58.977000 не может преобразовать tot datetime
, потому что сначала есть дополнительный знак :
после года, а дробные секунды - 6 цифр вместо макс. 3.
Если строка всегда имеет одинаковую длину и один и тот же формат, то для решения этой проблемы вы можете использовать следующее:
DECLARE @example varchar(25) = '03MAR2020:02:45:58.977000'
SET @example = LEFT(@example, 22) --- remove last 3 zeros
SET @example = STUFF(@example, CHARINDEX(':', @example), LEN(':'), ' ') ---repalce the first ':'
SELECT convert(datetime, @example) --- convert to datetime
Подробнее: Вот части типа данных datetime
на сервере SQL.
YYYY is four digits from 1753 through 9999 that represent a year.
MM is two digits, ranging from 01 to 12, that represent a month in the specified year.
DD is two digits, ranging from 01 to 31 depending on the month, that represent a day of the specified month.
hh is two digits, ranging from 00 to 23, that represent the hour.
mm is two digits, ranging from 00 to 59, that represent the minute.
ss is two digits, ranging from 00 to 59, that represent the second.
n* is zero to three digits, ranging from 0 to 999, that represent the fractional seconds.
Взято из документации SQL сервера
https://docs.microsoft.com/en-us/sql/t-sql/data-types/datetime-transact-sql?view=sql-server-ver15