Несколько формат даты в столбце - PullRequest
0 голосов
/ 21 марта 2019

У меня есть столбец с именем дата В этом столбце у меня есть несколько форматов даты, как это:

2017-06-14

04 /09/15

Тип столбца varchar.

Я хочу преобразовать этот столбец в дату-время в следующем формате:

гггг-мм-дд

Я не знаю, как это сделать, когда у меня два разных формата в одном столбце.

Можете ли вы помочь с этим?

Ответы [ 4 ]

1 голос
/ 21 марта 2019

Каждый формат представления строки потенциально может требовать собственного стиля даты конвертации, поэтому:

with cte as (
select '2017-06-14' DateString
union all
select '04/09/15' -- expected dateformat: dd/mm/yy
)

select 
case when DateString like '%-%-%' then CONVERT(DATE, DateString, 20) -- ODBC canonical
     when DateString like '%/%/%' then CONVERT(DATE, DateString, 3) -- French 
     else null
end
from cte

Результаты до:

2017-06-14
2015-09-04
1 голос
/ 21 марта 2019

Попробуйте использовать FORMAT(CAST(@yourVarchar AS DATETIME), N'yyyy-MM-dd') функцию:

DECLARE @f varchar(50) = '2017-06-14'
SELECT FORMAT(CAST(@f AS DATETIME), N'yyyy-MM-dd')

ВЫВОД:

2017-06-14

и ваш второй случай:

DECLARE @a varchar(50) = '04/09/15'
SELECT FORMAT(CAST(@a AS DATETIME), N'yyyy-MM-dd')

ВЫВОД:

2015-04-09
0 голосов
/ 21 марта 2019

Для sql-server версий больше или равных 2012 вы можете использовать parse(),

select parse([date] as date using 'en-US') from [your_table]

или try_parse(), что немного более надежно,

select try_parse([date] as date using 'en-US') from [your_table]
0 голосов
/ 21 марта 2019

Если все они имеют допустимые форматы, простое приведение будет работать

with cte as(
    select '2017-06-14' as val
    union all
    select '04/09/15' as val
)
select val, cast(val as date) from cte

04/09/15 будет конвертировано 9 апреля или 4 сентября в зависимости от языка вашей базы данных

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