【问题标题】:Get last one year records获取最近一年的记录
【发布时间】:2020-09-15 04:51:29
【问题描述】:

我正在尝试从 SQL Server 数据库中获取最近一年的记录。

例如,今天是 2020 年 5 月 28 日,那么它应该从 2019 年 5 月 1 日获取记录。但是我数据库中的日期列存储为整数。

我尝试了以下查询,但它不起作用,

SELECT Ft.EmpCode, Ft.YMD 
FROM DADAILYF AS Ft
WHERE Ft.YMD BETWEEN CONVERT(varchar(19), GETDATE(), 112) - INTERVAL 1 YEAR 
                 AND CONVERT(varchar(19), GETDATE(), 112);

请帮我解决这个问题。

【问题讨论】:

  • 请举例说明日期的样子。你的数据是个谜。
  • 日期列数据类型为整数,取值如20190101,20190102,20190103……等到今天,每天都会增加记录。
  • @aaa 请edit您的问题与新信息。

标签: sql sql-server tsql date where-clause


【解决方案1】:

例如今天是 2020 年 5 月 28 日,那么它应该从 2019 年 5 月 1 日获取记录

您将日期存储为整数,例如YYYYMMDD。你可以像这样使用算术:

where ymd >= (year(getdate()) - 1) * 10000 + month(getdate()) * 100 + 1

计算为您提供一年前当前月份的开始,作为 n 整数(即 20190501)。

如果你想要一个上限(比如,直到今天),那么:

where ymd
    between (year(getdate()) - 1) * 10000 + month(getdate()) * 100 + 1
    and year(getdate()) * 10000 + month(getdate()) * 100 + day(getdate())

【讨论】:

  • 非常感谢您的快速回复。 SQL 运行良好!
  • 对于直到今天获取相同数据的两个查询,它正在获取所有记录。只是想知道为什么要将 10000 乘以年,将 100 乘以月?
【解决方案2】:

另一个选项是format()。注意MM01') - 10000

示例

Select *
 From  Yourtable
  Where YMD between format(getdate(),'yyyyMM01') - 10000 
                and format(getdate(),'yyyyMMdd')

退货

YMD
20200515

【讨论】:

    猜你喜欢
    • 2018-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-12
    • 1970-01-01
    相关资源
    最近更新 更多