使用日期字段使用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 2008 R2:使用多个 CTE 获取日期明智的记录