【发布时间】:2010-12-27 18:56:15
【问题描述】:
我有一个数据表,将每年、月份和日期的值存储为整数:
year | month | day
2009 | 1 | 1
2008 | 12 | 2
2007 | 5 | 5
我需要将它转换为日期时间值,因为我需要在操作之间的日期时间中使用它。我怎么能这样做?
【问题讨论】:
标签: sql-server datetime
我有一个数据表,将每年、月份和日期的值存储为整数:
year | month | day
2009 | 1 | 1
2008 | 12 | 2
2007 | 5 | 5
我需要将它转换为日期时间值,因为我需要在操作之间的日期时间中使用它。我怎么能这样做?
【问题讨论】:
标签: sql-server datetime
SELECT CAST(CAST(year AS varchar) + '/' + CAST(month AS varchar) + '/' + CAST(day as varchar) AS datetime) AS MyDateTime
FROM table
【讨论】:
为了独立于语言和区域设置,您应该使用 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)
【讨论】:
您可以将您的值转换为“十进制”日期时间,然后将其转换为真正的日期时间列:
select cast(rtrim(year *10000+ month *100+ day) as datetime) as Date from DateTable
请参阅here 了解更多信息。
【讨论】:
纯日期时间解决方案,不依赖于语言或 DATEFORMAT,无字符串
SELECT
DATEADD(year, [year]-1900, DATEADD(month, [month]-1, DATEADD(day, [day]-1, 0)))
FROM
dbo.Table
【讨论】: