gpt4 book ai didi

SQL 比较两个日期的最快方法(非标准 varchar 格式和日期时间)

转载 作者:行者123 更新时间:2023-12-03 01:49:40 29 4
gpt4 key购买 nike

我有两个“日期”字段需要加入。

第一个是格式为 yyyy-mm-dd hh:mm:ss 的普通日期时间

第二个是红头步骤子格式的 varchar(8) mmddyyyy

现在这变得很痛苦,因为没有简单的方法可以转换为相应的类型。有一个内置格式 yyyymmdd 但与 varchar 格式不匹配。

我可以看到两条路径:

declare @normal_date as datetime;
declare @hated_date as varchar(8);

set @normal_date='1974-11-01 00:00:00.000'
set @hated_date='11011974'

--cast to date time with string splits
select @normal_date
where CONVERT(datetime, RIGHT(@hated_date,4)+LEFT(@hated_date,2)+SUBSTRING(@hated_date,3,2))=@normal_date

--convert normal date to ackward format
select @normal_date
where REPLACE(CONVERT(varchar(10),@normal_date,101), '/','')=@hated_date

哪个更好?或者有更好的办法吗?

已编辑以显示费用

--Operator cost (39%)
CONVERT(datetime, RIGHT(@hated_date,4)+LEFT(@hated_date,2)+SUBSTRING(@hated_date,3,2))=@normal_date

--Operator cost (57%)
REPLACE(CONVERT(varchar(10),@normal_date,101), '/','')=@hated_date

--Operator cost (46%)
cast(stuff(stuff(@hated_date, 3,0, '/'),6,0,'/') as datetime)=@normal_date

--Operator cost (47%)
RIGHT(@hated_date, 4) + LEFT(@hated_date, 4)=@normal_date

最佳答案

这是 yyyymmdd 否?

RIGHT(@hated_date, 4) + LEFT(@hated_date, 4)

所以,你的脚本就变成了

declare @normal_date as datetime;
declare @hated_date as varchar(8);

set @normal_date='1974-11-01 00:00:00.000'
set @hated_date='11011974'

--SELECT @hated_date = RIGHT(@hated_date, 4) + LEFT(@hated_date, 4))

select 'hurrah' WHERE @normal_date = RIGHT(@hated_date, 4) + LEFT(@hated_date, 4)

关于SQL 比较两个日期的最快方法(非标准 varchar 格式和日期时间),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3781675/

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