Sql server 2012 连接具有已创建字段的表时,转换失败错误
我有一个表(DateDimension),其中一个字段(MonthYear)是varchar。这些值如下所示:Sql server 2012 连接具有已创建字段的表时,转换失败错误,sql-server-2012,inner-join,Sql Server 2012,Inner Join,我有一个表(DateDimension),其中一个字段(MonthYear)是varchar。这些值如下所示: INNER JOIN dbo.DateDimension dd ON dd.MonthYear = a.ReportingPeriod 2017年12月 11 2017 10 2017 2017年9月 我还有另一个表(SupplierData),其中包含一个字段(GR Date),该字段是一个varchar,我正在使用它创建一个字段(ReportingPeriod),用作DateDi
INNER JOIN dbo.DateDimension dd ON dd.MonthYear = a.ReportingPeriod
2017年12月
11 2017
10 2017
2017年9月
我还有另一个表(SupplierData),其中包含一个字段(GR Date),该字段是一个varchar,我正在使用它创建一个字段(ReportingPeriod),用作DateDimension表的联接
以下是ReportingPeriod的代码:
ReportingPeriod = Cast(DatePart(Month, [GR Date]) As varchar(2)) + ' ' + Cast(DatePart(Year, [GR Date]) As Varchar(4))
当我尝试像这样创建我的联接时:
INNER JOIN dbo.DateDimension dd ON dd.MonthYear = a.ReportingPeriod
我收到这个错误:
从字符串转换日期和/或时间时,转换失败
如何解决此问题?听起来您的错误是由
GR Date
的错误值引起的。最好的解决方案是确保使用了正确的数据类型,但也可以使用try\u cast()
,因为它将返回null
,而不是在无法转换值时抛出错误
ReportingPeriod = Cast(DatePart(Month, try_cast([GR Date] as date)) As varchar(2))
+ ' '
+ Cast(DatePart(Year, try_cast([GR Date] as date)) As Varchar(4))
在Sql Server 2012及更高版本中:当转换失败而不是出现错误时,每个都将返回
null