2011-01-13 138 views
0

我有以下的代码没有问题SQL错误:转换从字符串转换日期时间时

SELECT (
    CASE WHEN 
     (SELECT DateDiff (Day, (
     SELECT ChildDOB1 FROM MatterDataDef Where ptMatter = $Matter$), 
     GETDATE()))>6574 THEN '(over 18)' 
    ELSE '(' + ChildDOB1 + ')' 
    END) 
FROM dbo.MatterDataDef WHERE ptMatter = $Matter$ 

Howeveer在其中exectues,当我试图包裹在方括号(这样我就可以在代码的失败使用它作为一个较长的等式的一部分),我收到以下错误

任何帮助赞赏:)

+0

ChildDOB1中的数据格式是什么?它是日期时间吗? – RichardTheKiwi 2011-01-13 11:12:59

+0

@cyberkiwi - 詹姆斯在最后一行没有说明吗? – 2011-01-13 11:17:29

回答

1
SELECT CASE 
      WHEN Datediff (DAY, childdob1, Getdate()) > 6574 
      THEN '(over 18)' 
      ELSE '(' + convert(varchar,childdob1) + ')' 
     END 
FROM dbo.matterdatadef 
WHERE ptmatter = $matter$ 

这相当于你的代码。额外的子查询和括号都是不必要的。 问题是,您将childdob1(datetime)添加到括号中而不转换为varchar。但是你真的想要一种特定的格式,或年龄?

1

,你必须

“从字符串转换日期时间时,转换失败”
ELSE '(' + ChildDOB1 + ')' 

您需要将其转换为字符类型..即VARCHAR

ELSE '(' + cast(ChildDOB1 as varchar(50)) + ')' 
相关问题