You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Snowflake中排除以E或E1结尾的ORDER_ID数据

解决ORDER_ID结尾匹配排除问题

需要排除ORDER_ID列中以E或E1结尾的订单,但保留那些E出现在开头或中间的订单(例如SDIE40000094113788)。之前的代码使用'%E%'会匹配所有包含E的订单,导致误删正常数据,以下是修正后的方案:

通用LIKE写法(适配多数数据库)

SELECT ORDER_ID,
       CASE WHEN ORDER_ID LIKE '%E' OR ORDER_ID LIKE '%E1' THEN 1 ELSE 0 END AS Exchange
FROM shop_orders_production op
WHERE CAST(op.ORIGINAL_TIMESTAMP AS DATE) >= '2022-12-01'
  AND CAST(op.ORIGINAL_TIMESTAMP AS DATE) < '2023-01-01'
  AND NOT (ORDER_ID LIKE '%E' OR ORDER_ID LIKE '%E1');

说明

  • %E 精准匹配以E结尾的订单号,%E1 精准匹配以E1结尾的订单号
  • 使用NOT逻辑排除上述两类订单,保留其他所有订单(包括开头、中间含E的订单)
  • 日期条件也可简化为BETWEEN '2022-12-01' AND '2022-12-31',效果一致

正则表达式写法(部分数据库支持,如PostgreSQL、MySQL)

如果你的数据库支持正则表达式,可用更简洁的语法:

-- PostgreSQL示例
SELECT ORDER_ID,
       CASE WHEN ORDER_ID ~ 'E1?$' THEN 1 ELSE 0 END AS Exchange
FROM shop_orders_production op
WHERE CAST(op.ORIGINAL_TIMESTAMP AS DATE) >= '2022-12-01'
  AND CAST(op.ORIGINAL_TIMESTAMP AS DATE) < '2023-01-01'
  AND NOT (ORDER_ID ~ 'E1?$');
-- MySQL示例
SELECT ORDER_ID,
       CASE WHEN ORDER_ID REGEXP 'E1?$' THEN 1 ELSE 0 END AS Exchange
FROM shop_orders_production op
WHERE CAST(op.ORIGINAL_TIMESTAMP AS DATE) >= '2022-12-01'
  AND CAST(op.ORIGINAL_TIMESTAMP AS DATE) < '2023-01-01'
  AND NOT (ORDER_ID REGEXP 'E1?$');

说明

  • E1?$ 表示匹配以E(1出现0次)或E1(1出现1次)结尾的字符串
  • 正则写法更简洁,适合复杂匹配场景,但需注意不同数据库的正则语法差异

内容的提问来源于stack exchange,提问作者steph

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 12:10:24