2012-06-30 4 views
0

мне нужна ваша милость над решимостью преобразования issue.The кода, который я имею, какКонверсия удалось при преобразовании DateTime из строки символов во время выполнения процедуры

ALTER PROCEDURE [WORKFLOW_APP].[DIAGNOSISCD_CAR] 
     @v_monthstr CHAR , 
     @v_monthend CHAR , 
     @v_year  CHAR , 
     @v_state_cd CHAR , 
     @v_claim_key CHAR , 
     @v_contractor CHAR 

DECLARE @v_makedatestr VARCHAR(10) 
DECLARE @v_makedateend VARCHAR(10) 

SELECT @v_makedatestr = '01-' + @v_monthstr + '-' + @v_year 
SELECT @v_makedateend = '01-' + @v_monthend + '-' + @v_year 


SELECT @v_datebegin = CONVERT(DATETIME, @v_makedatestr,105)----error 
SELECT @v_dateend = DATEADD(D, -DAY(DATEADD(M, 1, CONVERT(DATETIME, @v_makedateend ,105))), DATEADD(M, 1, CONVERT(DATETIME, @v_makedateend ,105)))---error 

Этот код формируется с помощью инструмента и изменилось где-то руководство.

Я получаю

"Конверсия удалось при преобразовании DateTime из строки символов.

в комментарии "error".

Я пробовал использовать функции преобразования, литья, но не смог их решить.

Любой из них предлагает ошибку и записывает соответствующий код преобразования для этой ошибки.

Я преобразование хранимой процедуры Oracle в SQL Server 2005.

Я использую SQL Server Management Studio Express 2005.

Что является неправильным из выше коды и что такое правильный код?

Любой код? ////// для правильного преобразования

+0

год, что ваш получают в Парам '@ v_year' находится в 2 цифры формируются? –

+1

Параметр типа 'CHAR' = ** 1 символ длинной строки **. Это действительно * то, что вам нужно? Если нет: определите 'CHAR (x)' (где 'x' - длина) - и если оно больше 5-10 символов, вместо этого используйте' VARCHAR (x) '! –

+1

@marc_s это действительно хороший момент –

ответ

0

Способ преобразования строки в datetime может привести к разным результатам в случае запуска сценария на сервере с различными настройками, связанными с культурой.

Для даты и времени в качестве строки я рекомендую вам следовать правилу построения строки, начиная с года, месяца и т. Д. ... yyyy-MM-dd.

SELECT @v_makedatestr = @v_year + '-' + @v_monthstr + '-01' 
SELECT @v_makedateend = @v_year + '-' + @v_monthend + '-01' 

Тогда вы могли бы просто сделать бросок:

cast(@v_makedatestr as datetime); 
cast(@v_makedateend as datetime); 
Смежные вопросы