Вы можете использовать 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 следует дополнять нулями.
совершенное, спасибо. Я не знал, что он существует –
@ayilmaz Существует также 'DATETIMEFROMPARTS' и больше функций datetime :) – lad2025
Неудачно, сервер 2008 года. Whatelse я могу использовать? Я буду отмечать ваш ответ как правильный, кстати –