【问题标题】:sql trimming functionsql修剪功能
【发布时间】:2018-05-17 10:04:12
【问题描述】:

我有一个名为 transactions 的表,其中有一列 Customer_Transactions_ID

现在此列中的值在下面有所不同

AB_EL_205_72330_H

AB_EL_820_23066_E_N

AB_EL_820_23066

我想修剪所有以“AB_EL”开头的值以使它们来自

AB_EL_820_23066_E_N (or whatever variation of the above) to
AB_EL_820_23066

所以在id之后基本上没有EH

这可能吗?

【问题讨论】:

  • 请正确发布数据
  • 另外,请告诉我们您的 sql 语言。添加它的标签。
  • 欢迎来到 StackOverflow!您能否请edit您的问题使其更易于理解?有关如何正确提问的信息,请参阅How to Ask。请务必添加一些示例数据和您的表结构以及预期的输出。也请告诉我们您的DBMS,因为每个 DBMS 的答案可能不同。帮助我们帮助您!
  • 只有_H_E_N 会出现两个结局吗?
  • 您重申要从字符串尾部删除_E_H,但您的示例也删除了_N。您应该使用 fullexact 要求更新您的问题...

标签: sql sql-server trim


【解决方案1】:

这将使您的值被截断,直到数字的最后一次出现。

SELECT
    Original = T.Customer_Transactions_ID,
    Truncated = SUBSTRING(
        T.Customer_Transactions_ID,
        1,
        LEN(T.Customer_Transactions_ID) - PATINDEX('%[0-9]%', REVERSE(T.Customer_Transactions_ID)) + 1)
FROM
    Transactions AS T

【讨论】:

  • 太棒了!除了具有如下 id 的值之外,一切正常:CT_ELFS_820_00695_E_N (2) 但其他一切正常!!!
【解决方案2】:

如果我正确理解了您的要求。如果文本以 ab_el 开头,则从文本中修剪 _e,_l。

DECLARE @txt VARCHAR(100)= 'aqb_el_205_72330_h';

SELECT ISNULL('ab_el'+CASE 当@txt LIKE 'ab_el%' 然后替换(替换(替换(@txt,'ab_el',''),'_e',''),'_h','') END,@txt);

【讨论】:

  • 这也将替换开头的“_e”,而不仅仅是结尾。
  • @EzLo,感谢您的精彩观察。我现在更改了仅在末尾替换的代码
猜你喜欢
  • 2017-01-08
  • 2020-08-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-20
  • 1970-01-01
  • 2016-12-11
  • 2014-07-19
相关资源
最近更新 更多