2014-11-27 5 views
1

Мне нужно заменить строку присваивания конкретному формату.Заменить, как в SQL Server 2008 R2

Пример:

Учитывая строка:

Between 0 and 0:15 

Заменить в:

Between '00:00:00' and '00:15:00' 

Моя попытка:

Declare @tm varchar(max) = 'Between 0 and 0:15' 
Declare @rep varchar(max) 

SET @rep = REPLACE(@tm,'0','''00:00:00'''); 
PRINT(@rep); 

Получение результата:

Between '00:00:00' and '00:00:00':15 
+0

что делать, если я/р 'Между 0:15 и 0: 30' –

+0

@NoDisplayName, очевидно, это будет «Между« 00: 15: 00 »и« 00: 30: 00'' – MAK

+1

Ничего не видно, если вы не заявите об этом. Что относительно 'Между 7 и 1'? Выбросить ошибку? –

ответ

2

Первый ответ будет делать это, однако я считаю, что вы хотите построить строку SQL, Так что мой запрос будет включать в кавычки

Declare @tm varchar(max) = 'Between 0 and 0:15' 
Declare @ST varchar(10), @ET varchar(10) 
Declare @rep varchar(max) 

--SET @rep = REPLACE(@tm,'0','''00:00:00'''); 
SET @TM = LTRIM(RTRIM(SubString(@TM, CHARINDEX(' ', @TM), LEN(@TM)))) -- Remove Between 
SET @ST = LTRIM(RTRIM(SubString(@TM, 1, CHARINDEX(' ', @TM)))) -- Get Start Time 
SET @TM = LTRIM(RTRIM(SubString(@TM, CHARINDEX(' ', @TM) + 4, LEN(@TM)))) -- Remove AND 
SET @ET = LTRIM(RTRIM(@TM)); 


SET @REP = 'Between ''' + Convert(varchar(8), convert(time, case when IsNumeric(@ST) = 1 then REPLACE(@ST,'0','00:00:00') else @ST end)) + 
''' and ''' + Convert(varchar(8), convert(time, case when IsNumeric(@ET) = 1 then REPLACE(@ET,'0','00:00:00') else @ET end)) + '''' 

PRINT(@rep); 

я показал каждый шаг удаления слова, и я не предполагал, что она всегда будет Between или что только первый раз может быть 0 но последний слишком

+0

Большое вам спасибо. – MAK

1

играть с этим.

IF OBJECT_ID('fn_FormatTime') IS NOT NULL DROP FUNCTION fn_FormatTime 

GO 
CREATE FUNCTION fn_FormatTime(@Variable NVARCHAR(100)) 
RETURNS NVARCHAR(100) 
BEGIN 
    DECLARE 
     @FirstHour NVARCHAR(100), 
     @SecondHour NVARCHAR(100) 

    SET @FirstHour = SUBSTRING(@Variable,8,CHARINDEX(' and',@Variable)-8) 
    SET @SecondHour = SUBSTRING(@Variable,CHARINDEX('and ',@Variable)+4,LEN(@Variable)-CHARINDEX('and ',@Variable)) 

    IF @FirstHour = 0 SET @FirstHour = '0:0' 
    IF CHARINDEX(':',@FirstHour) = 0 SET @FirstHour = @FirstHour + ':0' 

    RETURN 'Between '+CONVERT(NVARCHAR,LEFT(CAST(@FirstHour as time),8))+' and '+CONVERT(NVARCHAR,LEFT(CAST(@SecondHour AS TIME),8)) 


END 
GO 

PRINT dbo.fn_FormatTime('Between 0 and 0:15') 
Смежные вопросы