0

我需要你的支持来解决转换问题。我喜欢的代码

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。

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

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

4

1 回答 1

0

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

对于作为字符串的日期时间,我建议您遵循从年份开始构建字符串的规则,然后是月份,依此类推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);
于 2012-06-30T09:09:12.060 回答