如何蒙上了字符集转换成日期格式的MS SQL Server
问题描述:
当我尝试投了字符集日期格式我得到一个错误的说法,Conversion failed when converting date and/or time from character string
我用下面的查询,如何蒙上了字符集转换成日期格式的MS SQL Server
SELECT TOP 1 FileName
FROM #myFiles order by
cast(
(SUBSTRING(filename,23,4))+'-'+
(SUBSTRING(filename,28,2))+'-'+
(SUBSTRING(filename,30,2)) as date)
desc
在以下记录,
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
我在做什么错在这里?我的日期格式是否正确?
答
一个选项...
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),'_','-'))
返回
2017-04-02
对于表格
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
返回
sfd_devtracker_back_2017_04_04_094339_4242105.bak
编辑其实,无需转换迄今为止
Order By substring(FileName,charindex('_20',FileName)+1,10) Desc
+0
谢谢@JohnCappelletti。我设法完成我的任务,而无需在您的帮助下转换为日期格式! –
+0
@NisalMalindaLivera对它有帮助。在第二次看了它之后,在我看来,这种转换并不是必要的欢呼:) –
答
你是一个小关上的数字。这是另一种选择:
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
不知道为什么你需要将它投射到日期。因为它的格式是YYYYMMDD,并且通过字符串的一部分来填充零就足够了......''按字符串排序(文件名,21,10)'或'按子字符串排序(文件名,21,25)'另外如果你有一个无效的日期条目sql不会在转换器上弹出。 – xQbert