2014-02-05 6 views
-2

Это в среде SQL SERVER 2012 У меня есть следующая проблема: у меня есть таблица с полем с типом datetime.Преобразование в SQL Server

Это поле как yyyy-mm-dd hh:mm:ss:msmsms - "2013-12-12 00: 00: 00,000"

И мне нужно, чтобы извлечь yyyy к одному полю. mm для другого и dd для последнего.

Я пытался сделать это

SELECT  distinct CONVERT(CHAR (10), Data, 120) as Dia, 
CONVERT(CHAR (7), Data, 120) as Mes, 
CONVERT(CHAR (4), Data, 120) as Ano 
FROM   Vendas 

но на выходе я получаю

Day 12-12-2013 
Month 12-2013 
Year 2013 

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

Кто-нибудь может мне помочь?

+1

ваши целевые поля числовые или символьные? –

ответ

5
SELECT YEAR(Data), MONTH(Data), DAY(Data) FROM dbo.Vendas; 

или

SELECT DATEPART(YEAR, Data), DATEPART(MONTH, Data), DATEPART(DAY, Data) 
    FROM dbo.Vendas; 

SQLFiddle

+0

Это не работает, я попробовал. –

+4

@ Emanuel Ну, тогда вам нужно предоставить немного больше информации. Вы можете начать с того, что означает «не работает». –

+1

@EmanuelBicho Я получил результат, ожидаемый со следующим: 'SELECT YEAR (GetDate()), MONTH (GetDate()), DAY (GetDate())'. Это похоже на то, что предложил Аарон. – BrettFromLA

0

Вы можете использовать функции по YEAR, MONTH и DAY извлечь необходимые компоненты из вашего DATETIME колонки что-то вроде этого ...

DECLARE @DateColumn DATETIME = GETDATE(); 

SELECT YEAR(@DateColumn) AS [Year] 
     ,MONTH(@DateColumn) AS [Month] 
     ,DAY(@DateColumn) AS [Day] 

Результат Набор

╔══════╦═══════╦═════╗ 
║ Year ║ Month ║ Day ║ 
╠══════╬═══════╬═════╣ 
║ 2014 ║  2 ║ 5 ║ 
╚══════╩═══════╩═════╝ 

запрос для таблицы

SELECT YEAR(Data) AS [Year] 
     ,MONTH(Data) AS [Month] 
     ,DAY(Data) AS [Day] 
FROM Vendas 
+0

, что тоже не работает, я нахожусь в Microsfot Visual Studio, создавая решение ETL, и мне нужно извлечь данные, как вы могли видеть в моем сообщении, но проблема в том, что у меня есть конверт, который просто получает, где он начинает читать, и читает до конца поля –

+0

Это РАБОТАЕТ, СПАСИБО ВАМ ТАК И МНОГО И ВСЕХ людей, которые пытались мне помочь. Спасибо –

+1

Не проблема @EmanuelBicho, если это вам помогло, вы можете принять это как ответ :) –

0

Попробуйте это:

SELECT GETDATE() 'Today', CONVERT(varchar(2), getdate(), 101) --Month Part 
SELECT GETDATE() 'Today', CONVERT(varchar(4), getdate(), 102) --Year Part 
SELECT GETDATE() 'Today', CONVERT(varchar(2), getdate(), 103) --Day Part 

или

SELECT GETDATE() 'Today', MONTH(GETDATE()) --Month Part 
SELECT GETDATE() 'Today', year(GETDATE()) --Year Part 
SELECT GETDATE() 'Today', day(GETDATE()) --Day Part 

или

SELECT GETDATE() 'Today', RIGHT('0'+CAST(MONTH(GETDATE()) AS varchar(2)),2) --Month Part 
SELECT GETDATE() 'Today', RIGHT('0'+CAST(year(GETDATE()) AS varchar(4)),4) --Year Part 
SELECT GETDATE() 'Today', RIGHT('0'+CAST(DAY(GETDATE()) AS varchar(2)), 2) --Day Part 

или

SELECT month('2014-12-23') --Month Part 
SELECT year('2014-12-23') --Year Part 
SELECT day('2014-12-23') --Day Part 
Смежные вопросы