Подтвердить что ты не робот

SQL Server: convert ((int) year, (int) month, (int) day) в Datetime

Возможный дубликат:
Создайте дату с T-SQL

У меня есть таблица данных, которая хранит каждый год, месяц и день как ints:

year | month | day
2009 |   1   |  1 
2008 |  12   |  2
2007 |   5   |  5

Мне нужно преобразовать его в значение datetime, потому что мне нужно использовать его в datetime между операциями. Как я могу это сделать?

4b9b3361

Ответ 1

Чтобы быть независимым от настроек языка и локали, вы должны использовать формат ISO 8601 YYYYMMDD - это будет работать в любой системе SQL Server с любым действующим языком и региональными настройками:

SELECT
   CAST(
      CAST(year AS VARCHAR(4)) +
      RIGHT('0' + CAST(month AS VARCHAR(2)), 2) +
      RIGHT('0' + CAST(day AS VARCHAR(2)), 2) 
   AS DATETIME)

Ответ 2

Чистое решение для времени и времени, не зависит от языка или DATEFORMAT, ни строк,

SELECT
    DATEADD(year, [year]-1900, DATEADD(month, [month]-1, DATEADD(day, [day]-1, 0)))
FROM
    dbo.Table

Ответ 3

Вы можете преобразовать ваши значения в "десятичное" datetime и преобразовать их в реальный столбец datetime:

select cast(rtrim(year *10000+ month *100+ day) as datetime) as Date from DateTable

Подробнее см. здесь.

Ответ 4

SELECT CAST(CAST(year AS varchar) + '/' + CAST(month AS varchar) + '/' + CAST(day as varchar) AS datetime) AS MyDateTime
FROM table