Sql server 2012 连接具有已创建字段的表时,转换失败错误

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

我有一个表(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),用作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


是的,这是错误的数据。尽管SSMS告诉我try_cast不是一个可识别的内置函数名,但它可以工作。