SQL如果第一个字段中有字母,如何在另一个字段上联接
我有一个SQL连接,看起来像这样SQL如果第一个字段中有字母,如何在另一个字段上联接,sql,sql-server,Sql,Sql Server,我有一个SQL连接,看起来像这样 INNER JOIN UPLOAD PH on cast(p.PickTicket_Number as varchar(20))=PH.FIELD004 然而,有时候,我真正想加入的领域是PH.FIELD003。当PH.FIELD004是一个包含字母的不同字段时,就会发生这种情况。我如何在ON子句中包含一个条件,如果field004中没有字母(是数字),它将像上面那样连接,但是如果它确实有字母,它将连接到pickticket number=field003?您
INNER JOIN UPLOAD PH on cast(p.PickTicket_Number as varchar(20))=PH.FIELD004
然而,有时候,我真正想加入的领域是PH.FIELD003。当PH.FIELD004是一个包含字母的不同字段时,就会发生这种情况。我如何在ON子句中包含一个条件,如果field004中没有字母(是数字),它将像上面那样连接,但是如果它确实有字母,它将连接到pickticket number=field003?您可以这样表达逻辑:
UPLOAD PH
ON cast(p.PickTicket_Number as varchar(20)) = PH.FIELD004 OR
(TRY_CONVERT(int, PH.FIELD004) IS NULL AND
CAST(p.PickTicket_Number as varchar(20)) = PH.FIELD003
)
注:
- 这将检查
是否无法转换为FIELD004
。希望这足够接近“里面有字母”。如果不是,则可以将INT
表达式与大小写
一起使用类似
是或
条件的性能杀手。函数调用(比如转换)也会妨碍优化器加入
- 如果性能是一个问题,请提出一个新问题
- 我猜“number”值是一个
;如果没有,请更改为相应的类型INT
- 将数字转换为字符串进行比较可能很危险。例如,我在前导0时遇到问题
UPLOAD PH
ON TRY_CONVERT(INT, PH.FIELD004) = p.PickTicket_Number OR
(TRY_CONVERT(int, PH.FIELD004) IS NULL AND
p.PickTicket_Number= PH.FIELD003
)
您可以这样表达逻辑:
UPLOAD PH
ON cast(p.PickTicket_Number as varchar(20)) = PH.FIELD004 OR
(TRY_CONVERT(int, PH.FIELD004) IS NULL AND
CAST(p.PickTicket_Number as varchar(20)) = PH.FIELD003
)
注:
- 这将检查
是否无法转换为FIELD004
。希望这足够接近“里面有字母”。如果不是,则可以将INT
表达式与大小写
一起使用类似
是或
条件的性能杀手。函数调用(比如转换)也会妨碍优化器加入
- 如果性能是一个问题,请提出一个新问题
- 我猜“number”值是一个
;如果没有,请更改为相应的类型INT
- 将数字转换为字符串进行比较可能很危险。例如,我在前导0时遇到问题
UPLOAD PH
ON TRY_CONVERT(INT, PH.FIELD004) = p.PickTicket_Number OR
(TRY_CONVERT(int, PH.FIELD004) IS NULL AND
p.PickTicket_Number= PH.FIELD003
)
涉及的三列的数据类型是什么?涉及的三列的数据类型是什么?