【问题标题】:Getting error while calculating the sun od datetime计算太阳 od 日期时间时出错
【发布时间】:2013-09-05 17:07:14
【问题描述】:
SELECT *, 
  ROW_NUMBER() OVER (ORDER BY checktime)RN 
INTO   XYZZ
FROM   test 
where  checktime>='2013-08-14 00:00:00.000' 
  and  checktime<='2013-08-14     23:00:00.000'     

........1

SELECT t1.*, 
  ( t2.checktime - t1.checktime) as w
FROM   XYZZ t1 
LEFT JOIN XYZZ t2 ON t1.RN = t2.RN - 1
union all
select null,null,null,null,null,null,null,null,null,
  Convert(varchar(10),sum(DatePart(hh,w)))+':'+
  Convert(varchar(10),sum(DatePart(mi,W)))
From XYZZ

...2

  1. 工作正常,但 2 不工作

我在 sql 中执行这个查询,我得到这个错误:

消息 207,级别 16,状态 1,行 10 列名“w”无效。消息 207, 第 16 级,状态 1,第 11 行 列名“W”无效。

【问题讨论】:

  • 不,我不知道为什么我写 (t2.checktime - t1.checktime) 作为 w 来计算两列的差异。

标签: sql


【解决方案1】:

你不能那样做,你不能在 UNION ALL 之后的第二个查询中引用别名,它们被单独处理,但你可以这样做:

SELECT t1.*, (t2.checktime - t1.checktime) as w
FROM   XYZZ t1 
LEFT JOIN XYZZ t2 ON t1.RN = t2.RN - 1
UNION ALL
SELECT null,null,null,null,null,null,null,null,null,
  Convert(varchar(10),sum(DatePart(hh,w)))+':'+
  Convert(varchar(10),sum(DatePart(mi,W)))
From
(
    SELECT t1.*, (t2.checktime - t1.checktime) as w
    FROM   XYZZ t1 
    LEFT JOIN XYZZ t2 ON t1.RN = t2.RN - 1
) AS t;

WITH CTE
AS
(
    SELECT t1.*, (t2.checktime - t1.checktime) as w
    FROM   XYZZ t1 
    LEFT JOIN XYZZ t2 ON t1.RN = t2.RN - 1
)
SELECT *
FROM CTE
UNION ALL
SELECT null,null,null,null,null,null,null,null,null,
  Convert(varchar(10),sum(DatePart(hh,w)))+':'+
  Convert(varchar(10),sum(DatePart(mi,W)))
FROM CTE;

【讨论】:

  • Msg 242,级别 16,状态 3,第 1 行 将 char 数据类型转换为日期时间数据类型导致日期时间值超出范围。警告:空值被聚合或其他 SET 操作消除。
  • @user2742150 - 您必须确保第一个中选择的列与UNION ALL 查询之后的查询中选择的相应列的数据类型相同。
  • @user2742150 - 但是,第二个查询中的最后一列 Convert(varchar(10),sum(DatePart(hh,w)))+':'+ Convert(varchar(10),sum(DatePart(mi,W))) 是数据类型 varchar,那么第一个查询中的最后一列必须是 varchar,或者将另一个转换为 datetime,必须是相同的数据类型。
  • @user2742150 - 在第一个而不是(t2.checktime - t1.checktime) as w,试试CONVERT(VARCHAR(50), (t2.checktime - t1.checktime)) as w
  • 它来了,但像这样 Jan 1 1900 12:02AM
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-04
  • 2011-09-24
  • 2014-03-04
  • 2018-02-27
相关资源
最近更新 更多