在执行过程时从字符串转换datetime时转换失败

时间:2012-06-30 08:54:13

标签: sql-server oracle procedure

我需要你帮忙解决转换问题。我喜欢的代码

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

此代码使用工具形成并更改了某处手册。

我正在

  

'从字符串转换日期时转换失败。'

在“错误”评论。

我尝试使用转换,强制转换功能但无法解析。

任何人都建议您输入错误并为该错误编写适当的转换代码。

我正在将Oracle存储过程转换为SQL Server 2005。

我正在使用SQL Server Management Studio Express 2005。

上面的代码有什么问题,代码是什么?

任何代码? ???? //////正确转换

1 个答案:

答案 0 :(得分:0)

如果您在服务器中运行具有不同文化相关设置的脚本,则将字符串转换为日期时间的方式可能会导致不同的结果。

对于作为字符串的datetime(s),我建议您遵循以年,月等开始构建字符串的规则...... 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);
相关问题