Reputation: 401
When I try to cast a character set to the date format i get an error saying, Conversion failed when converting date and/or time from character string
I used the following query,
SELECT TOP 1 FileName
FROM #myFiles order by
cast(
(SUBSTRING(filename,23,4))+'-'+
(SUBSTRING(filename,28,2))+'-'+
(SUBSTRING(filename,30,2)) as date)
desc
On the following records,
sfd_devtracker_back_2017_04_02_094339_4242105.bak
sfd_devtracker_back_2017_04_03_094339_4242105.bak
sfd_devtracker_back_2017_04_04_094339_4242105.bak
What am i doing wrong here? Is my date format correct?
Upvotes: 1
Views: 158
Reputation: 82020
One option...
Declare @S varchar(max)='sfd_devtracker_back_2017_04_02_094339_4242105.bak'
Select try_convert(date,replace(substring(@S,charindex('_20',@S)+1,10),'_','-'))
Returns
2017-04-02
For the table
Declare @YourTable table (FileName varchar(max))
Insert Into @YourTable values
('sfd_devtracker_back_2017_04_02_094339_4242105.bak'),
('sfd_devtracker_back_2017_04_03_094339_4242105.bak'),
('sfd_devtracker_back_2017_04_04_094339_4242105.bak')
Select Top 1 *
From @YourTable
Order By try_convert(date,replace(substring(FileName,charindex('_20',FileName)+1,10),'_','-')) Desc
Returns
sfd_devtracker_back_2017_04_04_094339_4242105.bak
EDIT Actually, no need to convert to date
Order By substring(FileName,charindex('_20',FileName)+1,10) Desc
Upvotes: 3
Reputation: 2460
You were a little off on the numbers. Here's another option:
SELECT CAST(
(SUBSTRING('sfd_devtracker_back_2017_04_04_094339_4242105.bak',21,4))+'-'+
(SUBSTRING('sfd_devtracker_back_2017_04_04_094339_4242105.bak',26,2))+'-'+
(SUBSTRING('sfd_devtracker_back_2017_04_04_094339_4242105.bak',29,2)) AS date) DT
,FileName
ORDER BY DT DESC
Upvotes: 0