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 между операциями. Как я могу это сделать?
Ответы
Ответ 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