SQL错误:从字符串转换datetime时转换失败

时间:2011-01-13 11:06:42

标签: 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$ 

然而,当我尝试将代码包装在括号中时(因此我可以将其用作更长方程式的一部分)我收到以下错误'转换从字符串转换日期时失败'

任何帮助表示赞赏:)

2 个答案:

答案 0 :(得分:1)

你有

的地方
ELSE '(' + ChildDOB1 + ')' 

你需要将它转换为字符类型..即varchar

ELSE '(' + cast(ChildDOB1 as varchar(50)) + ')' 

答案 1 :(得分: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。但你真的想要特定格式的DOB,还是年龄?