SQL Server-仅在条件为数字时加入

时间:2018-11-22 11:46:08

标签: sql sql-server join

我有一张桌子EmployeeLeave

  CREATE TABLE EmployeeLeave (
  EmployeeId INT,
  LeaveType VARCHAR()
  );

LeaveType可以包含数字和字符串。

  CREATE TABLE MST_LeaveReason (
  ReasonId INT,
  Reason VARCHAR()
  );

  SELECT * FROM EmployeeLeave EL
  LEFT JOIN MST_LeaveReason LR ON LR.ReasonId = EL.LeaveType 

以上查询将不起作用,因为LeaveType并不总是数字。我希望仅当LeaveType为数字时,此联接才能工作。我该如何实施。请帮忙。

谢谢。

1 个答案:

答案 0 :(得分:3)

使用try_convert()

SELECT *
FROM EmployeeLeave EL LEFT JOIN
     MST_LeaveReason LR
     ON LR.ReasonId = TRY_CONVERT(INT, EL.LeaveType);

您也可以从另一个方向执行此操作:

SELECT *
FROM EmployeeLeave EL LEFT JOIN
     MST_LeaveReason LR
     ON CONVERT(VARCHAR(255), LR.ReasonId) = EL.LeaveType;

然后,修复数据模型。 JOIN键应为相同类型。这样的转换会对性能产生重大影响。