SQL Server 日期查询,年月作为单独的列

Posted

技术标签:

【中文标题】SQL Server 日期查询,年月作为单独的列【英文标题】:SQL Server Date Query, year and month as separate columns 【发布时间】:2013-02-21 20:35:47 【问题描述】:

我有一个表格,其中年份和月份作为整数存储在单独的列中。我的问题是如何从当前日期(即运行查询的日期)检索前 12 个月。因此,如果日期是 2013 年 2 月 15 日,那么我只想获取 2013 年 2 月 15 日至 2012 年 2 月 14 日的记录,而不返回任何其他年份和月份。

有简单的方法吗?

谢谢

【问题讨论】:

您的示例使用 DAY 但您没有使用 DAY 列... 如果你只有年和月,那么日从何而来? 看看你的例子,你想检索从 2012 年 2 月到今天的记录吗? 【参考方案1】:

使用DATEADD() 查找 1 年前的日期:

SELECT *
FROM myTable
WHERE DATEADD(year, -1, GETDATE()) >= 
      CONCAT(CAST(year AS varchar), CAST(month AS varchar), CAST(date AS varchar))

【讨论】:

我已经编辑了你的答案,因为函数是 DATEADD 而不是 DATE_ADD 你是正确的,它是不带下划线的 DATEADD,但 year 完全可以接受【参考方案2】:

只是给你一个想法,也许这样的事情会有所帮助:

select CONVERT(datetime, CONCAT ( year, month, date ))
from your_table

【讨论】:

假设他有一个DAY 列,我知道这让他的例子感到困惑。【参考方案3】:

我强烈建议您更改该数据库的设计。 正如 Edgar Frank Codd 所说,日期是原子的,也就是说,它不能(或不应该)分成更小的部分。 如果还不算太晚,请更改您的设计,将日期设置为日期时间格式,这将消除检索日期的任何问题。你有数百个日期和时间函数可以轻松检索日期,否则你会去思考查询。

选择(随便) 从(表) current_date() AND Dateadd(yy,-1,current_date()) 之间的哪里(表的日期列);

如果您更改设计,这将是您查询的代码。 否则,您可以这样做:

选择(随便) 从(表) where (table.year between (Select MAX(table.year) From table) AND (Select MAX(table.year)-1 From table)) AND table.month = (尝试获取实际月份) AND table.day = (尝试获取实际日期);

如您所见,很难确定查询是在哪一天和哪一个月执行的。 对于年份,我假设最大年份是实际年份... 这不是做事的方式,我强烈建议您更改设计。 希望对您有所帮助。

【讨论】:

以上是关于SQL Server 日期查询,年月作为单独的列的主要内容,如果未能解决你的问题,请参考以下文章

sql server 数据库,在查询sql语句中日期格式转换问题,怎么把原数据年月日时分秒转换成年月日

SQL里怎么把日期截取为月份

SQL里怎么把日期截取为月份

sql怎么取时间字段的年月日的值

SQL Server——如何指定日期格式

sqlserver 数据库查询一个时间段根据年月日三个字段,注意是三个字段