使用日期字段使用sql server获取前一天记录

Posted

技术标签:

【中文标题】使用日期字段使用sql server获取前一天记录【英文标题】:Fetch Previous day record using sql server using Date field 【发布时间】:2015-01-12 09:47:23 【问题描述】:

我想使用Sql Server 中的日期字段从表中获取previous day 记录。

但是我正在使用下面的 sql 语句,但它没有给出任何记录。

TDTE = CAST(DATEADD(DD,-1,CURRNT_TIMESTAMP) AS DECIMAL(8,0))

TDTE=CAST(DATEADD(DD,-1,GETDATE())AS DECIMAL(8,0))

其中TDTE 列采用YYYYMMDD 格式。

【问题讨论】:

TDTE的列类型是什么? @Gyan05 这是一个日期字段,但格式为例如 20150112 等,即 YYYYMMDD 【参考方案1】:

删除Cast 函数Dateadd 返回Date 而不是Integer 值。试试这个。

Where TDTE  = Cast(DATEADD(DD,-1,GETDATE()) as Date)

【讨论】:

抛出错误。SqlState: 22003, ErrorCode: 8115, ErrorMsg: [Microsoft][ODBC SQL Server Driver][SQL Server]将表达式转换为数据类型日期时间的算术溢出错误。 @Gyan05 不知道为什么现在更新了错误检查 SQL##f - SqlState: 22005, ErrorCode: 206, ErrorMsg: [Microsoft][ODBC SQL Server Driver][SQL Server]操作数类型冲突:日期与十进制不兼容...试过 DECIMAL (8,0) 代替日期。但也没有得到任何结果【参考方案2】:

试试这个。

Where TDTE  = CONVERT(VARCHAR(10), DATEADD(DAY,-1,GETDATE()), 112)

OR(十进制格式)

Where TDTE  = CAST(CONVERT(VARCHAR(10), DATEADD(DAY,-1,GETDATE()), 112)AS DECIMAL(18,0))

【讨论】:

Excellent..Finally..:) 你能告诉我为什么使用 112 吗? 它的 CONVERT(VARCHAR(10),GETDATE(),112) 会将日期转换为 YYYYMMDD 格式。它已经由 SQL Server 编写。您可以通过更改数字来更改为另一种格式,例如,103 会将日期转换为 dd/mm/yyyy 格式。 @Gyan05 好一个没想到+1 你会比我解决得更快,因为你的查询比我好。 OP 稍后更新了列的类型。无论如何谢谢你:) @NoDisplayName 嘿朋友,我在两天前发布了一个问题***.com/questions/27838045/…。我没有通过实时示例获得适当的反馈。你能为我的问题带来一些实时的例子和一个好的解决方案吗? @NoDisplayName

以上是关于使用日期字段使用sql server获取前一天记录的主要内容,如果未能解决你的问题,请参考以下文章

在 SQL Server 中获取一周的第一天

sql server中如何查找一天内固定时间段内某个字段对应的记录条数?

SQL Server 2008 R2:使用多个 CTE 获取日期明智的记录

获取本月、本季、本年第一天和最后一天等等sql(sql server)

SQL Server:从最大日期/最新日期的记录中获取数据

sql server 如何将日期时间字段修改成最接近该时间的整点时间?