如何在MS SQL Server中将字符集强制转换为日期格式
当我尝试将字符集强制转换为日期格式时,我收到一个错误消息,如何在MS SQL Server中将字符集强制转换为日期格式,sql,sql-server,date,casting,substring,Sql,Sql Server,Date,Casting,Substring,当我尝试将字符集强制转换为日期格式时,我收到一个错误消息,从字符串转换日期和/或时间时转换失败我使用了以下查询 SELECT TOP 1 FileName FROM #myFiles order by cast( (SUBSTRING(filename,23,4))+'-'+ (SUBSTRING(filename,28,2))+'-'+ (SUBSTRING(filename,30,2)) as date) desc 根
从字符串转换日期和/或时间时转换失败
我使用了以下查询
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
sfd_devtracker_back_2017_04_04_094339_4242105.bak
用于表格
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
返回
2017-04-02
sfd_devtracker_back_2017_04_04_094339_4242105.bak
实际编辑,无需转换为日期
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
你在数字上有点不对劲。还有一个选择:
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将不会在转换时爆炸。谢谢@johncapelletti。在你的帮助下,我没有转换成日期格式就完成了我的任务@NisalMalindaLivera很高兴这有帮助。第二次看了之后,我意识到转换并不是必要的,欢呼声:)