SELECT id,
sageaccount,
sageid,
totalwithoutvat,
vat,
total,
invoicedate,
alloweditting,
finished,
CASE WHEN isposted = 1 THEN 'Posted on ' + posteddate
ELSE 'Not Posted'
END AS Posted
FROM Invoices
WHERE (sageaccount = @sageaccount)
如果我把“+ postdate”带走,它的效果非常好。但是使用+ posteddate,我收到了这个错误:
从字符串转换datetime时转换失败。
publishdate字段通常为null,除非posted为true,而且publishdate的格式为definetly datetime。
有什么想法吗?
答案 0 :(得分:3)
您需要将publishdate转换为varchar值,以便将其与另一个varchar值连接('Posted on')
SELECT id,
sageaccount,
sageid,
totalwithoutvat,
vat, total,
invoicedate,
alloweditting,
finished,
CASE WHEN isposted = 1 THEN 'Posted on ' + CONVERT(varchar(10), posteddate, 20) ELSE 'Not Posted' END AS Posted
FROM Invoices
WHERE (sageaccount = @sageaccount)
答案 1 :(得分:1)
我怀疑你是在抱怨你试图在字符串中添加日期。取决于您使用的平台:
1)确保可以使用“+”实现字符串连接。您可能需要调用函数,例如CONCAT()
2)将日期转换为字符串。
答案 2 :(得分:0)
您正在添加两个具有不同类型的值,因此数据库会尝试将其中一个值转换为另一个类型。
在连接之前将datetime值转换为字符串:
SELECT
id, sageaccount, sageid, totalwithoutvat, vat, total,
invoicedate, alloweditting, finished,
CASE
WHEN isposted = 1 THEN 'Posted on ' + convert(varchar, posteddate)
ELSE 'Not Posted'
END AS Posted
FROM Invoices
WHERE sageaccount = @sageaccount
答案 3 :(得分:0)
必须首先将PostedDate视为字符串,然后才能将其加入另一个字符串。 你可以这样做转换
CONVERT(varchar(10),posteddate,101)
CONVERT的语法: CONVERT(data_type [(length)],expression [,style])
样式是可选的
以下是一些样式样本:
101 = mm / dd / yyyy ex。 01/02/1999
102 = yy.mm.dd ex。 99.02.01
103 = dd / mm / yyyy ex。 1999年2月1日