【问题标题】:removing zwnj character from string in postgres during select statement在 select 语句期间从 postgres 中的字符串中删除 zwnj 字符
【发布时间】:2010-12-28 10:09:42
【问题描述】:

utf 编码的字符串末尾包含 Zwnj(零宽度非连接符)并存储在数据库中。 是否可以在选择语句期间删除该字符。我试过 trim() 但没有用。

【问题讨论】:

    标签: postgresql unicode width zero


    【解决方案1】:
    CREATE TABLE test (x text);
    INSERT INTO test VALUES (E'abc');
    INSERT INTO test VALUES (E'foo\u200C');  -- U+200C = ZERO WIDTH NON-JOINER
    SELECT x, octet_length(x) FROM test;
      x  │ octet_length 
    ─────┼──────────────
     abc │            3
     foo │            6
    (2 rows)
    
    CREATE TABLE test2 AS SELECT replace(x, E'\u200C', '') AS x FROM test;
    SELECT x, octet_length(x) FROM test2;
      x  │ octet_length 
    ─────┼──────────────
     abc │            3
     foo │            3
    (2 rows)
    

    【讨论】:

      【解决方案2】:

      你需要使用replace(your_column, 'Zwnj','')而不是trim()

      【讨论】:

      • @ahwnn 不起作用。我试过替换(kan_text,'zwnj',''),替换(kan_text,'&Zwnj','')。执行查询时,末尾有一个看起来像管道符号的字符。
      • zwnj 是你给我们的例子(我不知道应该是什么)。当然,您需要将其替换为您要替换的真实字符。
      • @kiranking:您可能想要编写转义字符串文字,以便可以使用反斜杠转义序列十六进制或 Unicode 来表示字符。 replace(your_column, E'\u9876','') 之类的东西(用 Unicode 文字替换 9876)。 postgresql.org/docs/9.1/static/…
      猜你喜欢
      • 2017-07-20
      • 2020-12-16
      • 2021-01-28
      • 1970-01-01
      • 2017-07-30
      • 1970-01-01
      • 1970-01-01
      • 2022-12-18
      • 2016-07-26
      相关资源
      最近更新 更多