从字符串CASE + CAST

时间:2017-05-12 18:19:37

标签: sql sql-server-2008 tsql

我是编程的初学者,我遇到了CAST的问题。

这是我的问题:

DECLARE @adtdays INT

SELECT 
    @adtdays = CASE 
                  WHEN DATEPART(MONTH, GETDATE()) > DATEPART(MONTH, CONVERT(DATETIME, Day1)) 
                     THEN DATEPART(DAY, (DATEADD(DAY, -1, CAST(CAST(DATEPART(MONTH, GETDATE()) AS VARCHAR) + '/1/' + CAST(DATEPART(year, Day1) AS VARCHAR) AS DATE)))) 
                     ELSE 0 
               END 
FROM 
    ProgProdAlpidi 
WHERE 
    ProductCode  = 'PRODUCT CODE' 

我收到以下错误

  

从字符串转换日期和/或时间时转换失败。

有人可以帮帮我吗?

好抱歉我是新的,,,理想的结果应该是:

如果当前月份大于“Day1字段”的月份,那么   删除一天到当月,1,当前年份。   这将带给我上个月的最后一天......

这将是'4/30/2017'

第一行是columnHeader,第二行是我表的第一行...

ProductCode     MY  Vehicle Project Dest    Line   Day1     Day2    Day3
PRODUCT CODE    MY  VEHICLE PROJECT DEST.   LIN    42826    42827   42828

但似乎我试图做的转换是错误的......

1 个答案:

答案 0 :(得分:0)

数据库表中Day1列的数据类型是什么?如果是INT,您的查询应该有效。但是,如果它类似于NVARCHARVARCHAR,那么您将收到上述报告的错误。