SQL Server-仅当条件为number时加入
我有一张桌子,请员工离开SQL Server-仅当条件为number时加入,sql,sql-server,join,Sql,Sql Server,Join,我有一张桌子,请员工离开 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
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为number时,我才希望此联接有效。我如何实现它。请帮忙
提前感谢。使用尝试转换()
:
您也可以从另一个方向执行此操作:
SELECT *
FROM EmployeeLeave EL LEFT JOIN
MST_LeaveReason LR
ON CONVERT(VARCHAR(255), LR.ReasonId) = EL.LeaveType;
然后,修复数据模型<代码>连接键应为相同类型。这种转换对性能有很大影响。使用try\u convert()
:
您也可以从另一个方向执行此操作:
SELECT *
FROM EmployeeLeave EL LEFT JOIN
MST_LeaveReason LR
ON CONVERT(VARCHAR(255), LR.ReasonId) = EL.LeaveType;
然后,修复数据模型<代码>连接键应为相同类型。这种转换对性能有很大的影响。如果您的
varchar
的长度只有1,为什么不使用char(1)
并节省使用“可变”长度的开销?@Larnu:varchar()
是(幸运的)不合法的语法。在这种情况下,它可能不是VARCHAR
-的简写形式,它的-no-length-which-implicitly-1。如果VARCHAR
的长度仅为1,为什么不使用char(1)
并节省使用“variable”长度的开销呢?@Larnu:VARCHAR()
是(幸运的?)不合法的语法。在本例中,它可能不是VARCHAR
-with-no-length-which-is-implicitly-1的缩写。