使用datediff时,将数据类型varchar转换为数字时出错



我正在尝试使用两个表来计算日期。这里的查询

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%准确的数据">

最新更新