【问题标题】:Return partial text from output, removing the text from another query从输出中返回部分文本,从另一个查询中删除文本
【发布时间】:2019-05-04 06:12:37
【问题描述】:

我需要返回一些包含我需要的值的数据,以及更多。如何检索数据,不包括其他地方存在的我不需要的值?

或者如果这是不可能的,需要删除的值的变化来自 5 种可能性,因此我可以“替换”任何出现的 5 吗?

例如:

    TABLE1

    ID    ITEM
    -------------------------
    1     AAA:CAR
    2     BBB:PLANE
    3     AAA:BIKE
    4     BBB:TRAIN
    5     CCC:BUS

我认为下面会从结果中删除 AAA:

    SELECT ITEM REPLACE(ITEM, 'AAA:', '')
    FROM TABLE1

假设这会返回

    ITEM
    ----------
    CAR
    BBB:PLANE
    BIKE
    BBB:TRAIN
    CCC:BUS

但是我想将 AAA: 和 BBB: 和 CCC: 替换为 '' 其中 AAA: 或 BBB: 或 CCC: 在其他地方存在,例如这里:

    TABLE2

    ID    THING
    -----------------
    1     AAA:
    2     BBB:
    3     CCC:
    4     DDD:
    5     EEE:

例如:

SELECT ITEM REPLACE(ITEM, '/* where THING ID exists in TABLE2 BETWEEN 1 and 5 */', '')
FROM TABLE1

或者如果这不可能,请说明可能存在的任何需要替换的变化:

SELECT ITEM REPLACE(ITEM, '/* AAA: or BBB: or CCC: or DDD: or EEE: */', '')
FROM TABLE1

此 SQL 新手将非常感谢您提供任何帮助!

【问题讨论】:

  • 有没有可能,去掉:之前的所有字符?还是您真的需要一份明确声明的替换清单?

标签: tsql partial


【解决方案1】:

看看这个查询(sqlfiddle: online query):

select t1.ID, ISNULL(REPLACE(t1.Item, t2.Thing, ''), t1.Item) AS THING
from table1 t1
left outer join table2 t2 on (CHARINDEX(t2.Thing, t1.Item) != 0);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-09
    • 2016-05-02
    • 1970-01-01
    • 2021-08-23
    • 2018-02-24
    相关资源
    最近更新 更多