【问题标题】:Filtering out values inside the field using SQL command使用 SQL 命令过滤掉字段内的值
【发布时间】:2020-02-23 01:31:14
【问题描述】:

我有一张如下表: 我还有一张如下表:

现在,我想从表 1-图像描述字段中过滤掉图像名称,并将其与表 2 中的图像名称进行比较,并在输出表中返回图像 ID。所以我想要我的输出表如下:

有人可以帮忙吗?

【问题讨论】:

    标签: sql oracle


    【解决方案1】:

    您可以使用substring_index()。假设它是最后一个值:

    select substring_index(image_description, 'image=', -1)
    from t;
    

    如果它可以在分号分隔列表中的任何位置:

    select substring_index(substring_index(image_description, 'image=', -1), ';', 1)
    from t;
    

    Here 是一个 dbfiddle。

    编辑:

    在 Oracle 中,您只需使用 regexp_replace():

    select regexp_replace(image_description, '^.*image=([^;]+).*', '\1')
    from t;
    

    Here 是这个版本的数据库小提琴。

    剩下的就是简单地加入价值观。

    【讨论】:

    • 我不知道为什么我对所有这些命令都收到相同的错误! ORA-00904: "SUBSTRING_INDEX": 无效标识符 00904. 00000 - "%s: 无效标识符"
    • @Dora 。 . .因为您标记了问题 MySQL 并且正在使用 Oracle。
    【解决方案2】:

    看起来您使用的是 Oracle 而不是 MySql,因此请尝试使用表 1 到表 2 的 left 连接和运算符 like 的此查询:

    select t1.Name, t2."image id"
    from table1 t1 left join table2 t2
    on t1."image description" like '%image="' || t2.image || '" />'
    

    这适用于您发布的示例数据,但如果image="..." 可能出现在字符串中的任何位置,则使用:

    on t1."image description" like '%image="' || t2.image || '"%'
    

    请参阅demo
    结果:

    > NAME | image id
    > :--- | -------:
    > x    |        1
    > b    |     null
    > y    |        2
    > z    |        2
    > a    |     null
    

    【讨论】:

    • 我想了解您查询的最后一部分:例如 '%image="' || t2.image || '" />'。你能解释一下吗?
    • 它将静态字符串 image= 与 t2.image 连接起来以返回类似 %image="xxx"%
    【解决方案3】:

    假设列 image_desc 的值始终具有以文本模式 image=.... 结尾的相同格式,则以下方法可行。

    SELECT SUBSTR(image_desc, LOCATE('image=', image_desc) + 6) AS image
    FROM images;
    

    【讨论】:

    • 我收到定位无效标识符错误。我也尝试过使用 position() 函数,但它不起作用。
    【解决方案4】:

    如果您的图像描述内容模式始终相同,并且您正在寻找的值在右侧 od = char

    那么您可以通过这种方式检查 = char 之后的正确部分

    对于mysql

    select SUBSTRING_INDEX(your_column_name,'=',-1) 
    from your_table 
    where your_column_name like '%image%';
    

    对于 Oracle,您可以使用

    SUBSTR(youc_col, INSTR(you_col, '=') + 1)

    select SUBSTR(youc_col, INSTR(you_col, '=') + 1) 
    from your_table 
    where your_column_name like '%image%';
    

    【讨论】:

    • 我正在定位无效识别错误。我也尝试了位置,但仍然无法正常工作
    • 确保您使用了正确的列名
    • 是的,它是正确的,但我仍然收到该错误:(不知道为什么
    • 向我显示确切的错误消息文本..请...我没有使用 locate ..所以请确保您使用的是我的代码
    • 这是我收到的错误消息 - ORA-00904: "SUBSTRING_INDEX": invalid identifier 00904. 00000 - "%s: invalid identifier" *原因:*操作:
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-06
    • 1970-01-01
    • 1970-01-01
    • 2018-06-19
    • 2011-04-03
    • 2014-09-19
    • 1970-01-01
    相关资源
    最近更新 更多