【问题标题】:Will you help me find the I cannot seem to cast as integer?你能帮我找到我似乎无法转换为整数吗?
【发布时间】:2020-12-15 21:24:22
【问题描述】:

我要做的就是从每个“location”中提取最新的“Scan”(因此是“LastScan”),然后找出其中任何一个是否超过 2 小时“old” (这会使它们过期)。

Select cast(max(entered_date) as int) as 'LastScan', location
FROM housing_activity
WHERE 'LastScan' <= Datediff(HH,-2,GETDATE())
Group by location

这是我的错误:

Msg 245, Level 16, State 1, Line 2
Conversion failed when converting the varchar value 'LastScan' to data type int.

【问题讨论】:

  • 在 SqlServer 中,您应该在 [ ] 中引用标识符,或者可能是双引号 (" ")。见stackoverflow.com/a/45865263/121309
  • 从不对列名使用单引号。你犯了一个永远不应该发生的错误(如果你做出那个改变,你会得到另一个错误,LastScan 是未知的,但至少这是有道理的)。

标签: sql sql-server casting column-alias


【解决方案1】:

试试这个

; WITH cte AS (
SELECT
  location
  , LastScan = entered_date
  , RN = ROW_NUMBER() OVER (PARTITION BY location ORDER BY entered_date DESC)
FROM housing_activity 
)
SELECT 
  *
FROM cte
WHERE 
   RN = 1
   AND LastScan <= DateAdd(hour,-2,GETDATE())

【讨论】:

  • 感谢您的所有帮助!我不知道单引号。 (尴尬)巨大的帮助。我使用了 CTE,它准确地提取了我需要的值。当我将代码复制到我的存储过程中并保存时,我没有问题。当我执行它时,我得到的错误似乎来自当我尝试插入表格以通过电子邮件发送时。有什么地方不正确吗?我搜索了@mail_body,但找不到答案。错误——从字符串转换日期和/或时间时转换失败。
  • 您需要将其作为一个新问题提出并提供更多详细信息。
猜你喜欢
  • 2021-02-21
  • 1970-01-01
  • 1970-01-01
  • 2023-01-22
  • 1970-01-01
  • 2014-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多