sql - SQL中如何替换Left Join语句中的部分字符串

标签 sql sql-server left-join

我有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 的最快方法。

关于sql - SQL中如何替换Left Join语句中的部分字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33930181/

相关文章:

mysql - SQL 内连接到左连接表

mysql - 在Mysql中从连接创建表时出错

mysql - 添加产品属性

sql - 特殊上标字符

php - 从两个具有id的表中检索数据并显示Mysql中另一个表的最大id

sql - sql server 2008中可以有数组类型数据吗

java - 选择更新之前是一个好方法还是反之亦然?

sql - 需要帮助使用动态 SQL 更新具有可变列的表

sql - 如果表不存在则插入到其他表中

sql - 概念化 SQL 查询以获取不存在的数据