Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在MS SQL Server中将字符集强制转换为日期格式_Sql_Sql Server_Date_Casting_Substring - Fatal编程技术网

如何在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很高兴这有帮助。第二次看了之后,我意识到转换并不是必要的,欢呼声:)