我有SQL语句

 LEFT JOIN SeniorCitizen on FinishedTransaction.SCID = SeniorCitizen.OSCAID


SCID有1234
OSCAID具有1234/102938

如何删除/ 102938以使其匹配

最佳答案

嗯,一种方法是使用LIKE

ON SeniorCitizen.OSCAID LIKE FinishedTransaction.SCID + '/%'


无法保证性能,但这应该正确执行join

编辑:

您可以通过使用计算列然后在计算列上创建索引来有效地执行此操作。

所以:

alter table SeniorCitizen
    add OSCAIDshort as ( cast(left(OSCAID, CHARINDEX('/', OSCAID) - 1) as int) );

create index idx_SeniorCitizen_OSCAIDshort on SeniorCitizen(OSCAIDshort);


(强制类型转换假定SCID列是整数。)

然后,您可以在联接中使用以下命令:

LEFT JOIN SeniorCitizen on FinishedTransaction.SCID = SeniorCitizen.OSCAIDshort


该公式可以使用计算列上的索引,因此可能是执行join的最快方法。

09-30 09:30