gpt4 book ai didi

tsql - 在查询中使用 TOP 1 的问题

转载 作者:行者123 更新时间:2023-12-01 02:54:06 25 4
gpt4 key购买 nike

我编写了以下查询来获取日期,删除它的时间部分并添加我想要的时间。
如果我在没有 TOP 子句的情况下运行此查询,它运行良好。但是当我添加它时,它返回以下异常:“从字符串转换日期和/或时间时转换失败。”

这是查询:

SELECT TOP 1 
CONVERT(DateTime, (CONVERT(varchar(50),CONVERT(Date, VRSAS.EventOn))
+ ' ' +
CONVERT(varchar(50), CONVERT(Time, '23:30')))) E
FROM ViewRangeSheetActualStatus VRSAS
Where VRSAS.EventOn <= '2010-07-31'
AND VRSAS.[Status] = 1
order by VRSAS.RangeSheet

字段 EventOn 的类型为 DateTime。

会发生什么?

最佳答案

我已经很容易地复制了这一点。我发现使用 DATEADD解决了

DATEADD(MINUTE, 23*60 + 30, CONVERT(DATETIME,CONVERT(DATE, VRSAS.EventOn)))

但我实际上还不确定为什么。重现步骤如下。
CREATE TABLE ViewRangeSheetActualStatus
(EventOn DATETIME,
[Status] BIT,
RangeSheet INT
)

INSERT INTO [dbo].[ViewRangeSheetActualStatus]([EventOn], [Status], [RangeSheet])
SELECT '20100903 11:02:39.517', 1, 1 UNION ALL
SELECT '20100731 11:03:23.577', 1, 1 UNION ALL
SELECT '20100731 00:00:00.000', 1, 1

/*Selects ALL records - No error*/
SELECT
CONVERT(DateTime, (CONVERT(varchar(50),CONVERT(Date, VRSAS.EventOn))
+ ' ' +
CONVERT(varchar(50), CONVERT(Time, '23:30')))) E
FROM ViewRangeSheetActualStatus VRSAS

/*Selects top (1) record - Error!*/
SELECT top (1)
CONVERT(DateTime, (CONVERT(varchar(50),CONVERT(Date, VRSAS.EventOn))
+ ' ' +
CONVERT(varchar(50), CONVERT(Time, '23:30')))) E
FROM ViewRangeSheetActualStatus VRSAS

看着 ComputeScalar两者在执行计划中的属性是不同的。

全部
(CONVERT(datetime,(CONVERT(varchar(50),CONVERT(date,[ViewRangeSheetActualStatus].
[EventOn] as [VRSAS].[EventOn],0),0)+[@1])+CONVERT(varchar(50),CONVERT(time(7),
[@2],0),0),0))

前 1
(CONVERT(datetime,(CONVERT(varchar(50),CONVERT(date,[ViewRangeSheetActualStatus].
[EventOn] as [VRSAS].[EventOn],0),121)+' ')+'23:30:00.0000000',0))

在最终转换为 datetime 之前第一个产生一个包含以下内容的 varchar
------------------------------
Sep 3 2010 11:30PM
Jul 31 2010 11:30PM
Jul 31 2010 11:30PM

第二个版本产生一个 varchar 包含
------------------------------
2010-09-03 23:30:00.0000000

它是 .0000000这会导致问题转换回 datetime .我不知道为什么要添加 TOP到查询会导致这种完全不相关的行为变化。

关于tsql - 在查询中使用 TOP 1 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3634647/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com