2016-03-04 3 views

ответ

10

Вы можете использовать DATEFROMPARTS (SQL Server 2012+):

SELECT DATEFROMPARTS([Year], [Month], [Day]) AS DateTim 
FROM table_name 

SQL Server 2008 (при условии, что год 4-значный):

SELECT CAST(CAST([year] AS VARCHAR(4)) + '-' + 
      CAST([month] AS VARCHAR(2)) + '-' + 
      CAST([day] AS VARCHAR(2)) 
     AS DATE) AS DateTim 
FROM table_name; 

LiveDemo


Как Gordon Linoff предложил в комментарии использовать YYYYMMDD как INT преобразовать в DATE:

SELECT CAST(CAST([year] * 10000 + [month]*100 + [day] AS VARCHAR(8)) 
      AS DATE) AS DateTim 
FROM table_name; 

LiveDemo2

Добавление

Для решения ypercubeᵀᴹ опасения по поводу DateFormat мы могли бы использовать ISO-8601, которая не влияет на DATEFORMAT или LANGUAGE настройки:

гггг-мм-ДДTчч: мм: сс [.mmm]

SELECT CAST(RIGHT('000'+ CAST([year] AS VARCHAR(4)),4) + '-' + 
      RIGHT('0' + CAST([month] AS VARCHAR(2)),2) + '-' + 
      RIGHT('0' + CAST([day] AS VARCHAR(2)),2) + 'T00:00:00' AS DATE) 
FROM table_name 

LiveDemo3

Для обработки лет до 1000 следует дополнять нулями.

+0

совершенное, спасибо. Я не знал, что он существует –

+0

@ayilmaz Существует также 'DATETIMEFROMPARTS' и больше функций datetime :) – lad2025

+0

Неудачно, сервер 2008 года. Whatelse я могу использовать? Я буду отмечать ваш ответ как правильный, кстати –

1

Мы можем использовать функцию CONVERT SQL, чтобы получить Datetime значение:

SELECT CONVERT(DATETIME, CONVERT(VARCHAR(2), Day) + '/' + CONVERT(VARCHAR(2), Month) + '/' + CONVERT(VARCHAR(4), Year),103) FROM Table_Name 
Смежные вопросы