Преобразование даты для YY-Monthtext в MM / DD / YYYY - PullRequest
0 голосов
/ 16 января 2020

Получите дату как "19-May" и необходимо преобразовать ее как '05/01/2019', "19-June" в '06/01/2019'.

Я пробовал конвертацию различных дат, но она не работала.

Ответы [ 3 ]

0 голосов
/ 16 января 2020

Полагаю, месяцы будут составлять только 3 символа, если это так, то

Select s,
       try_Cast(concat(right(s, 3), ' 2019') as Datetime)
from
(
    values
    ('19-May'),
    ('19-Jun')
) t(s);

Если месяцы действительно идут как "июнь" и "август", то

select s, 
       try_cast(concat(substring(s, charindex('-',s)+1, 3), ' 2019') as date)
from
(
    values
    ('19-May'),
    ('19-June'),
    ('15-August')
) t(s);

Если вам нужно отформатировать его как mm/dd/yyyy, а затем использовать стиль 101.

0 голосов
/ 16 января 2020

Вы можете сделать:

SELECT DATEADD(DAY, 1, EOMONTH(CONVERT(DATE, Dates + '-2019'), -1))
FROM ( VALUES ('19-May'), ('19-June') 
     ) t(Dates);
0 голосов
/ 16 января 2020

Вы можете попробовать это. Сохранение даты в этом формате не является хорошим предложением. Вам следует использовать правильный тип данных, который предназначен и доступен для.

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

Select Try_Cast('19-May 2019' as Datetime)

ИЛИ

Select Try_Cast('19-May' + '2019' as Datetime)

Чтобы получить первую дату месяца, вы можете попробовать следующий запрос.

SELECT DATEADD(month, DATEDIFF(month, 0, Try_Cast('19-May 2019' as Datetime)), 0) AS StartOfMonth

Редактировать

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

declare @dateinStr varchar(20) = '19-May'
Select try_cast('01-' + Replace(@dateinStr, LEFT(@dateinStr, 3), '') + LEFT(@dateinStr, 2) as Datetime) as Date

Вот демоверсия .

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