SQL来提取字符串的一部分

SQL来提取字符串的一部分,sql,string,tsql,Sql,String,Tsql,我试图从文件名中提取时间戳。文件名看起来像是“10-19-2019 15-16-24的重新标签”。我想从该文件名中提取时间戳,即15-16-24。有人能帮我处理SQL查询吗?我尝试使用子字符串,但子字符串不适用于所有文件名。如果15-16-24的目标是15:16:24,则我理解为时间。您可以使用right()提取它: 您甚至可以将其转换为时间: select try_convert(time, replace(right(filename, 8), '-', ':')) 如果15-16-24的

我试图从文件名中提取时间戳。文件名看起来像是“10-19-2019 15-16-24的重新标签”。我想从该文件名中提取时间戳,即
15-16-24
。有人能帮我处理SQL查询吗?我尝试使用子字符串,但子字符串不适用于所有文件名。

如果
15-16-24
的目标是
15:16:24
,则我理解为时间。您可以使用
right()
提取它:

您甚至可以将其转换为时间:

select try_convert(time, replace(right(filename, 8), '-', ':'))

如果
15-16-24
的目标是
15:16:24
,那么我将其理解为时间。您可以使用
right()
提取它:

您甚至可以将其转换为时间:

select try_convert(time, replace(right(filename, 8), '-', ':'))

您可以非常明确地使用
DATETIMEFROMPARTS
SUBSTRING

declare @dt_string varchar(100) = right('Relabels for 10-19-2019 15-16-24', (8+2)+1+(6+2));

select DATETIMEFROMPARTS(
  SUBSTRING(@dt_string,7,4), -- year
  SUBSTRING(@dt_string,1,2), -- month
  SUBSTRING(@dt_string,4,2), -- day
  SUBSTRING(@dt_string,12,2), -- hour
  SUBSTRING(@dt_string,15,2), -- minute
  SUBSTRING(@dt_string,18,2), -- second
  0 -- millisecond
  ) as dt_parsed;

您可以非常明确地使用
DATETIMEFROMPARTS
SUBSTRING

declare @dt_string varchar(100) = right('Relabels for 10-19-2019 15-16-24', (8+2)+1+(6+2));

select DATETIMEFROMPARTS(
  SUBSTRING(@dt_string,7,4), -- year
  SUBSTRING(@dt_string,1,2), -- month
  SUBSTRING(@dt_string,4,2), -- day
  SUBSTRING(@dt_string,12,2), -- hour
  SUBSTRING(@dt_string,15,2), -- minute
  SUBSTRING(@dt_string,18,2), -- second
  0 -- millisecond
  ) as dt_parsed;

15-16-24是一个时间戳???你对什么文件名有问题?“我尝试了其他数据,但不起作用,但我不会共享代码、数据或失败的方式”对我们没有帮助。15-16-24是一个时间戳???你对什么文件名有问题?“我用其他数据尝试了一些东西,但它不起作用,但我不会分享代码、数据或它是如何失败的”这对我们没有帮助。