【问题标题】:convert date column into week number, date, month, year将日期列转换为周数、日期、月份、年份
【发布时间】:2026-02-17 10:25:01
【问题描述】:

我在数据库中有一个日期列 Time,我想将其转换为 4 个新列

我在我的 test 数据库中使用了类似的东西

SELECT DATEPART(wk,`Time`), DATEPART(dd,`Time`),DATEPART(mm,`Time`),DATEPART(wk,`yyyy`), FROM `Test` WHERE 1

这有什么问题?

【问题讨论】:

  • 我删除了 MySQL 标签,因为它没有DATEPART()
  • 包装标识符的`是MySql,但DATEPART函数是Sql server。如果是 Sql Server,只需将标识符中的 ` 去掉即可。
  • 你想用WHERE 1做什么?

标签: sql sql-server database sql-server-2008


【解决方案1】:

在 Sql server 中,你不能用 ` 包裹你的标识符。

但是,由于Time 是sql server 中的一种数据类型,所以我用[] 包装了它: 试试这个查询:

SELECT DATEPART(Week,[Time]) As [Week],
       DATEPART(Day,[Time]) As [Day],
       DATEPART(Month,[Time]) As [Month],
       DATEPART(Year,[Time]) As [Year] 
FROM Test

另外,在 select 子句的最后一个元素之后有一个额外的逗号, 并且 Where 子句没有意义,所以我删除了它。

【讨论】:

  • 谢谢。像 DATEPART 和 day(time) 那样做有什么区别?
  • 唯一的区别是datepart可以返回日期的不同部分,而day只返回日期部分。 Day(Time) 将返回与 Datepart(Day, Time) 相同的内容。
【解决方案2】:

你有错误的语法来获取年份并且在 From 子句之前还有额外的 (,)

尝试如下:

SELECT DATEPART(wk,GETDATE()), DATEPART(dd,GETDATE()),DATEPART(mm,GETDATE()),DATEPART(yy,GETDATE())

SELECT DATEPART(week,GETDATE()), DATEPART(day,GETDATE()),DATEPART(month,GETDATE()),DATEPART(year,GETDATE())

SELECT DATEPART(wk,[Time]), DATEPART(dd,[Time]),DATEPART(mm,[Time]),DATEPART(yy,[Time]) From TableName

【讨论】:

    【解决方案3】:
    select datepart(week,GETDATE()) as [week]
            , datepart(DAY,GETDATE()) as [DAY]
            , datepart(month,GETDATE()) as [month]
             ,datepart(year,GETDATE()) as [year]
    

    【讨论】:

      【解决方案4】:

      您也可以像这样使用YEAR,MONTH,DAY 来简化它:

      SELECT
          YEAR(GETDATE()),
          MONTH(GETDATE()),
          DAY(GETDATE()),
          DATEPART(WEEK,GETDATE())
      

      【讨论】: