SQL子字符串从特殊字符到特殊字符

时间:2015-11-09 04:52:53

标签: sql sql-server sql-server-2008

我有一个包含varchar值的列。我想把字符串部分从第一个空格带到第二个空格。

例: DB Value 10/15/2015 10:05:02 AM

返回值10:05:02

我怎样才能做到这一点?

2 个答案:

答案 0 :(得分:1)

对于db值AM

,您可以尝试以下内容
DECLARE @val AS VARCHAR(100)='10/15/2015 10:05:02 AM'
SELECT @val = CONVERT(TIME ,@val) 
SELECT SUBSTRING(@val ,1 ,8) RetValue

Output AM

下面有db值PM

DECLARE @val AS VARCHAR(100)='10/15/2015 10:05:02 PM'
SELECT @val = CONVERT(TIME ,@val) 
SELECT SUBSTRING(@val ,1 ,8) RetVal 

Output-PM

如果您使用的是sql-server 2008并且收到以下错误,

  

类型TIME不是定义的系统类型。

然后试试这个,

DECLARE @val AS VARCHAR(50)='2/15/2015 10:05:02 PM'
SELECT CONVERT(VARCHAR ,CAST(@val AS DATETIME) ,108) ReturnValue

enter image description here

如果您的数据库值类似于'12/15/2015 10:05:02 AM''02/15/2015 10:05:02 PM',但仍希望结果为 12小时格式,则可以执行以下操作,

DECLARE @val AS VARCHAR(50)='02/15/2015 10:05:02 PM'
--SET @val = SUBSTRING(@val,1,19)
SELECT CONVERT(VARCHAR ,CAST(SUBSTRING(@val,1,19) AS DATETIME) ,108) ReturnValue

' 02/15/2015 10:05:02 PM'和' 2/15/2015 10:05:02 PM' - 两者都会返回您的预期结果。

答案 1 :(得分:0)

Declare @temp nvarchar(50)= cast('10/15/2015 10:05:02 AM' as time)

现在,@ temp仅包含时间值。 如果你想从行中删除毫秒,那么你可以使用SUBSTRING函数。

Select SUBSTRING(@temp,1,8)