SQL Server:将((int)year,(int)month,(int)day)转换为Datetime

bal*_*int 41 sql-server datetime

可能重复:
使用T-SQL创建日期

我有一个数据表,将每年,每月和每天的值存储为整数:

year | month | day
2009 |   1   |  1 
2008 |  12   |  2
2007 |   5   |  5
Run Code Online (Sandbox Code Playgroud)

我需要将它转换为datetime值,因为我需要在操作之间的日期时间使用它.我怎么能这样做?

mar*_*c_s 69

为了独立于语言和区域设置,您应该使用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)
Run Code Online (Sandbox Code Playgroud)

  • @marc_s是的,Redmond的家伙有时会在命名中"摇滚"...... (5认同)
  • @ Fr0sT:我**具体**说这是用于**SQL Server**... (3认同)
  • @ Fr0sT:**SQL Server**但***是官方产品名称!如果要引用产品类,请使用"数据库服务器"或"RDBMS"或类似的东西..... (3认同)
  • @marc_s调用"MS SQL Server"一个"SQL服务器"总是令我困惑.这就像说"智能手机"仅表示"iPhone"或"OS"仅表示"Windows". (2认同)

gbn*_*gbn 37

纯日期时间解决方案,不依赖于语言或DATEFORMAT,没有字符串

SELECT
    DATEADD(year, [year]-1900, DATEADD(month, [month]-1, DATEADD(day, [day]-1, 0)))
FROM
    dbo.Table
Run Code Online (Sandbox Code Playgroud)


Dom*_*etz 8

您可以将值转换为"十进制"日期时间,然后将其转换为实际的日期时间列:

select cast(rtrim(year *10000+ month *100+ day) as datetime) as Date from DateTable
Run Code Online (Sandbox Code Playgroud)

有关详细信息,请参阅此处.