我正在尝试使用两个表来计算日期。这里的查询
select DATEDIFF(DAY, convert(varchar,D.BUSS_DATE, 23), convert(varchar,A.BUSS_DATE,23))
FROM dbo.TrxA1 A WITH (NOLOCK)
LEFT JOIN SOURCE_TBL_MASTER_EXCHANGE_RATE_HISTORY D WITH (NOLOCK)
ON A.CCY = D.SPOT_RATE
但是我得到错误
将数据类型varchar转换为numeric时出错。
我一直在将这些日期列转换为varchar,但错误仍然相同。
请帮忙。非常感谢。
您应该转换为日期,而不是字符串。如果您的数据使用正确的类型,则可能根本不需要转换:
select datediff(day, D.BUSS_DATE, A.BUSS_DATE)
from dbo.TrxA1 A left join
SOURCE_TBL_MASTER_EXCHANGE_RATE_HISTORY D
on A.CCY = D.SPOT_RATE;
如果您的值不适合存储为字符串,您可以使用进行转换
select datediff(day, convert(date, D.BUSS_DATE, 23), convert(date, A.BUSS_DATE, 23))
如果您仍然有问题,可以使用try_convert()
:进行修复
select datediff(day, try_convert(date, D.BUSS_DATE, 23), try_convert(date, A.BUSS_DATE, 23))
但这只是掩盖了问题。你应该找到令人反感的价值观:
select buss_date
from dbo.TrxA1 A
where try_convert(date, buss_date, 23) is null and buss_date is not null;
然后修复值并将数据类型更改为适当的日期/时间类型。
最后,除非您知道NOLOCK
在做什么,否则不要使用它。你可能不会。CCD_ 3是一个许可证;你可以从表中得到不是100%准确的数据">