2014-10-14 2 views
0

В базе данныхКак отделить дату?

Date 

5/29/2013 
12/4/2013 
12/1/2014 

Выход будет как этот

Year Month date 
2013 5  29 
2013 12  4 
2014 12  1 

Я попробовал этот код:

select [Date], 
right([Date],4) as year , 
left([Date],CHARINDEX('/',[Date])-1) as month , 
substring([Date],3,2) as date 
FROM Table1 

, но он не показал результат правильно.

+0

ли дата столбец VARCHAR? – Deepshikha

+0

Да, тип данных столбца - varchar. – SaNa3819

+0

Вы контролируете формат содержимого этого поля? вы уверены, что формат даты равен m/d/y в 100% случаев? что вы имеете в виду именно так: «он не показал результат правильно»? будьте осторожны, что sql не является инструментом презентации, поэтому вы не можете и никогда не будете иметь идеальное форматирование. – Paolo

ответ

0

Пожалуйста, попробуйте:

select 
    Year(CONVERT(Datetime, [Date])) [Year], 
    Month(CONVERT(Datetime, [Date])) [Month], 
    Day(CONVERT(Datetime, [Date])) [Date] 
FROM Table1 
+0

Ошибка конверсии с ошибкой :( – SaNa3819

1
DECLARE @datevar varchar(50) = '10/10/2014' 
declare @date datetime = convert(date,@datevar,101) 
SELECT datepart(year, @date) AS 'year' 
    ,DATEPART(month, @date) AS 'Month' 
    ,DATEPART(day, @date) AS 'Day' 

вы можете использовать это также.

+0

Yay. ['CONVERT'] (http://msdn.microsoft.com/en-GB/library/ms187928.aspx), вызываемый без * стиль * и двусмысленный формат даты (например, '2014/10/09' могут быть интерпретированы как 9 октября или 10 сентября) –

+0

обновленный ответ. @Damien_The_Unbeliever – Mukund

+0

' 101' - правильный формат для примеров в вопросе, так что +1 для этого, но это, конечно, неправильный формат для даты примера в вашем ответе. «111» было бы более подходящим для этого, но я бы предложил изменить дату вашего примера, чтобы соответствовать тем, которые были в вопросе, вместо изменения * style *. –

0
create table #t(id varchar(10)) 
insert into #t values('5/29/2013'), 
('12/4/2013'), 
('12/1/2014') 

select year(id) as [year],month(id) as [month],day(id) as [day] from #t 
0

Пожалуйста, попробуйте это тоже:

select datepart(year,[Date]) [year], 
     datepart(month,[Date]) [month], 
     datepart(day,[Date]) [day] 
    FROM table1 
0

Почему вы делаете так просто сделать, как написано ниже

SELECT CONVERT(DATE,[date]) , 
YEAR = DATEPART(YEAR , CONVERT(DATETIME, [date])), 
MONTH = DATEPART(MONTH , CONVERT(DATETIME, [date])), 
DAY = DATEPART(DAY, CONVERT(DATETIME, [date])) 
FROM DateTable 

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

0

Поскольку Date является столбцом varchar, сначала преобразуйте его в DateTime, а затем выполните следующие операции:

SET DATEFORMAT MDY; 

select [Date], 
     cast ([Date] as Datetime), 
     Year(cast ([Date] as Datetime)) [Year], 
     Month(cast ([Date] as Datetime)) [Month], 
     Day(cast ([Date] as Datetime)) [Date] 
FROM Table1 

DEMO

Смежные вопросы