我有一个varchar列,其中包含此数据"Mon, 11 Nov 2019 12:00:00 +0800"
。我只想选择12:00:00
的时间。
例如:
select 'Last Updated on Mon, 11 Nov 2019 12:00:00 +0800'
它应该返回"12:00:00"
sql中是否有解决此问题的函数?
答案 0 :(得分:2)
由于您的样品没有几秒钟,我相信它的默认值为:00
。使用Patindex
和substring
可以解决问题。
declare @str varchar(max) = 'Last Updated on Nov 11 2019, 12:45 pm +08'
select concat(substring(@str, patindex('%[0-1][0-9]:[0-5][0-9]%'
, @str), 5), ':00')
输出:
或忽略minutes
和seconds
select concat(substring(@str, patindex('%[0-1][0-9]:[0-5][0-9]%'
, @str), 2), ':00:00')
输出:
if将考虑am/pm
。 cast
到time
。
select cast(concat(substring(@str, patindex('%[0-1][0-9]:[0-5][0-9]%'
, @str), 2), ':00:00', substring(@str, patindex('%[0-1][0-9]:[0-5][0-9]%', @str) + 6, 2)) as time)
答案 1 :(得分:2)
declare @str varchar(max) = 'Last Updated on Nov 11 2019, 1:45 pm +08';
select LTRIM(substring(@str, patindex('%[01 ][0-9]:[0-5][0-9]%', @str), 5)+':00');
尝试一下。它涵盖了小时数少于10(即个位数)的情况。