2015-11-09 2 views
0

У меня есть столбец, который содержит значение varchar. Я хочу взять часть строки из первого пространства во второе пространство.SQL-подстрока от специального символа до специального символа

Ex: DB Значение 10/15/2015 10:05:02 AM

Возвращаемое значение 10:05:02

Как я могу добиться этого?

+0

https://msdn.microsoft.com/en-us/library/ms187748.aspx? –

+3

, что должно ожидаться, если оно будет 10/15/2015 10:05:02 PM ?? –

+0

ожидаемый результат 10:05:02 – Tom

ответ

1

Вы можете попробовать что-то вроде ниже для значения дб 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

Ниже со значением дб 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

Если у вас есть значение DB, как '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' - оба возвращают ожидаемый результат.

+0

, но в течение нескольких месяцев длина @val будет изменяться. ех. '2/15/2015 10:05:02 PM'. Теперь функция подстроки будет работать неправильно – Tom

+0

, так что вы ожидаете от этого значения '2/15/2015 10:05:02 PM'? - – pedram

+0

ожидаемый результат 10:05:02 – Tom

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

Теперь @temp содержит только значение времени. Если вы хотите удалить миллисекунды из строки, вы можете использовать функцию SUBSTRING.

Select SUBSTRING(@temp,1,8) 
+0

Я думаю, что он уже упомянул об этом: «столбец, который содержит значение varchar», поэтому не нужно брать nvarchar, а затем использовать его как время. также ваш ответ кажется моим. было бы лучше, если бы вы предоставили некоторые комментарии к моему ответу. – pedram