【问题标题】:Fetch Previous day record using sql server using Date field使用日期字段使用sql server获取前一天记录
【发布时间】: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

标签: sql-server


【解决方案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
  • 嘿朋友,我在两天前发布了一个问题stackoverflow.com/questions/27838045/…。我没有通过实时示例获得适当的反馈。你能为我的问题带来一些实时的例子和一个好的解决方案吗? @NoDisplayName
猜你喜欢
  • 2021-09-13
  • 1970-01-01
  • 2020-12-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-30
  • 1970-01-01
相关资源
最近更新 更多