Как конвертировать varchar в формат даты - PullRequest
0 голосов
/ 05 сентября 2018

Я хочу преобразовать свое поле (dateVar = '08 / 2018 ') в поле реальной даты. На самом деле у меня есть только месяцы и годы, поэтому мне нужно добавить только 01 как день. Мой окончательный результат должен быть 2018-08-01.

CREATE TABLE dateTable (
    dateVar varchar(10)
);

insert into dateTable (dateVar)
values('08/2018'),('01/2015');

Я использовал это для преобразования в дату, но не работает

SELECT CONVERT(date, dateVar, 103) FROM dateTable

Ответы [ 3 ]

0 голосов
/ 05 сентября 2018

Вы должны использовать стандартные форматы для дат:

insert into dateTable (dateVar)
    values('2018-08-01'), ('2015-01-01');

Дефисы являются стандартом ISO и стандартом в большинстве баз данных. Он почти всегда работает правильно в SQL Server, но настоящий стандарт SQL Server отбрасывает дефисы - '20180801' и '20150101'.

Затем в таблице должна быть указана дата для столбца:

CREATE TABLE dateTable (
    dateVar date
);

Если вам нужно увидеть это в определенном формате, используйте вычисляемую переменную:

CREATE TABLE dateTable (
    dateVar date,
    date_mmyyyy as (right(convert(varchar(10), dateVar, 103), 7))
);

Тогда date_mmyyyy показывает значение так, как вы хотели бы его видеть.

0 голосов
/ 05 сентября 2018

Хитрость заключается в том, чтобы просто манипулировать строкой в ​​формате ГГГГММДД и приводить ее.

cast(right(dateVar,4) + left(dateVar,2) + '01' as date) 
0 голосов
/ 05 сентября 2018

Вы можете объединить отсутствующие 01:

SELECT CONVERT(date, '01/'+dateVar, 103)
FROM tab

Демоверсия DBFiddle

Чтобы избежать проблем с неправильным вводом пользователя, вы можете использовать TRY_CONVERT. В случае ошибки преобразования он вернет NULL.

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