I have two date fields that I need to join.
The first is a normal datetime in the format yyyy-mm-dd hh:mm:ss
The second is varchar (8) in child format with red voice mmddyyyy
Now it becomes painful because there is no easy way to convert to the appropriate type. There is a built-in yyyymmdd format, but not matching the varchar format.
There are two ways that I can see:
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
What's better? Or is there a better way?
Edited to show costs
--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