我已经得到了以下代码,其中没有任何问题
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$
然而,当我尝试将代码包装在括号中时(因此我可以将其用作更长方程式的一部分)我收到以下错误'转换从字符串转换日期时失败'
任何帮助表示赞赏:)
答案 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,还是年龄?