知識庫

從字串中擷取以字元分隔的子字串


發佈時間 : 13 Dec 2013
上次修改日期 : 11 Mar 2024

問題

如何從較大的字元字串中擷取由特定的開始和結束字元分隔的字元字串。

環境

  • Tableau Desktop

答案

以下說明會描述如何從長字元字串中擷取子字串,並且可以在附加的工作簿中進行查看
  1. 選擇「分析」>「創建計算欄位」
  2. 在開啟的「計算欄位」對話方塊中:
    • 命名此計算欄位。在範例工作簿中,計算欄位名為 Substring
    • 在公式欄位中,建立類似如下的計算欄位:
      IF CONTAINS([<Dimension>], '<Identifying Character 1>') THEN
      MID(
          [<Dimension>],
          FIND([<Dimension>],'<Identifying Character 1>') + 1,
          FIND([<Dimension>],'<Identifying Character 2>') - (FIND([<Dimension>],'<Identifying Character 1>') +1)
      )
      END
      
  3. 按一下「確定」
  4. 將 Substring 拖到架。

其他資訊

  • 此計算不包括最終子字串中的識別字元。若要包括識別字元,請移除上述計算中在兩個位置出現的「+1」。
  • 使用 CONTAINS([<Dimension>], '<Identifying Character 1>') 條件的 IF 陳述式會篩選出不包含第一個識別字元的任何字串。這是有必要的,因為若找不到該字元,FIND() 會傳回 0,這仍然是 MID() 的有效起始位置。
  • 「標識字元 1」會位於所需子字串的開頭。
  • 「識別字元 2」會位於所需子字串的末尾。
  • 嘗試在同一字元的 2 個執行個體之間尋找子字串時(例如,字串「the *dog* is brown」中的「 dog」)時,請對第二個執行個體使用 FINDNTH(),而不是 FIND()。這可能類似於:
    • MID(
          [<Dimension>],
          FIND([<Dimension>],'<Identifying Character>') + 1,
          FINDNTH([<Dimension>],'<Identifying Character>', 2) - (FIND([<Dimension>],'<Identifying Character>') +1)
      )
      
這篇文章是否解決了問題?