【问题标题】:SQL Replace with wildcardsSQL 用通配符替换
【发布时间】:2016-11-24 06:23:15
【问题描述】:

我慢慢发现替换字符串不适用于通配符。我有大约 10 个 SKU,这 10 个 SKU 每个都有大约 20 个子 SKU。

示例:_Example - 父 SKU Example7bTL - 子 SKU

-最终结果是将所有子 SKU 转换为 _Example,这样我就可以获得以干净格式出售的单位总数。

我目前有什么可以参考的。

use test


CREATE TABLE #test (
Test int,
BillQty char(300) )


select   Quantity, REPLACE (SKU,  '%EXAMP%', 'Example') As Sku
from test.dbo.tblSFCOrderTxn




drop table #Test

Raw Data Example---

Quantity        SKU
210            EXAMPLE7BOTL-C
42             EXAMPLE4BOTL
30             EXAMPLE1BOTL
28             EXAMPLE12BOTL
100            EXAMPLE7BOTL
97             EXAMPLE4BOTL
29             EXAMPLE7BOTL-C

我想要它是什么

Quantity        SKU
536             _Example

我使用的是 SQL Server 2012

【问题讨论】:

  • 编辑您的问题并提供示例数据、所需结果和您正在使用的数据库的标签。 SQL Fiddle 也很有帮助。

标签: sql sql-server tsql replace


【解决方案1】:

鉴于您的数据,只需使用case

select (case when left(sku, 1) = '_' then '_Example' else sku end)

【讨论】:

    【解决方案2】:

    不应该仅仅为了求和()而改变数据。我会选择:

    SELELCT   
    CASE WHEN SKU LIKE '%EXAMP%' THEN '_Example' ELSE SKU END AS SKU,
    SUM(Quantity) AS Quantity
    FROM test.dbo.tblSFCOrderTxn
    GROUP BY CASE WHEN SKU LIKE '%EXAMP%' THEN '_Example' ELSE SKU END
    ORDER BY 1
    

    如果你真的想改变数据,那就是:

    UPDATE test.dbo.tblSFCOrderTxn
    SET SKU = '_Example'
    WHERE SKU LIKE '%EXAMP%'   
    

    【讨论】:

      【解决方案3】:

      会有帮助的

      SELECT SUM(Quantity),'_Example' AS SKU FROM test.dbo.tblSFCOrderTxn GROUP BY CASE SKU WHEN '1' THEN '1' ELSE '2' END
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-02-01
        • 2013-04-01
        • 2015-08-03
        • 2019-08-12
        • 2017-02-23
        • 2014-01-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多