用两个定界符分割字符串并转换类型

ata

我有一个像这样的PL / pgSQL函数(感谢使之成为可能的人):

 CREATE OR REPLACE FUNCTION public.split_string(text, text)
    RETURNS SETOF text
    LANGUAGE plpgsql
    AS $function$
    DECLARE 
      pos int; 
      delim_length int := length($2);
    BEGIN
      WHILE $1 <> ''
      LOOP
        pos := strpos($1,$2);
        IF pos > 0 THEN
          RETURN NEXT substring($1 FROM 1 FOR pos - 1);
          $1 := substring($1 FROM pos + delim_length);
        ELSE
          RETURN NEXT $1;
          EXIT;
        END IF; 
      END LOOP;
      RETURN;
    END;
    $function$

它使用定界符分割字符串。像这样:

select * from split_string('3.584731 60.739211,3.590472 60.738030,3.592740 60.736220', ' ');

"3.584731"
"60.739211,3.590472"
"60.738030,3.592740"
"60.736220"

如何将结果保存在temp_array或temp_table中。因此,我可以在temp_x中获得结果,然后再次拆分这些点。喜欢:

"3.584731"
"60.739211"
"3.590472"
"60.738030"
"3.592740"
"60.736220"

并将值返回为double precision所有这些都应在函数中完成。

欧文·布兰德斯特

如果您需要中介步骤:

SELECT unnest(string_to_array(a, ' '))::float8
       -- or do something else with the derived table
FROM   unnest(string_to_array('3.584731 60.739211,3.590472 60.738030', ',')) a;

这比更加冗长regexp_split_to_table(),但是可能会更快,因为正则表达式通常更昂贵。(使用进行测试EXPLAIN ANALYZE。)

我首先在处进行拆分',',然后在处进行拆分' '-按照您所描述的相反顺序似乎更合适。

如果需要,可以将其包装到PL / pgSQL函数中:

CREATE OR REPLACE FUNCTION public.split_string(_str text
                                             , _delim1 text = ','
                                             , _delim2 text = ' ')
  RETURNS SETOF float8 AS
$func$
BEGIN
   RETURN QUERY
   SELECT unnest(string_to_array(a, _delim2))::float8
          -- or do something else with the derived table from step 1
   FROM   unnest(string_to_array(_str, _delim1)) a;
END
$func$ LANGUAGE plpgsql IMMUTABLE;

或者只是一个SQL函数:

CREATE OR REPLACE FUNCTION public.split_string(_str text
                                             , _delim1 text = ','
                                             , _delim2 text = ' ')
  RETURNS SETOF float8 AS
$func$
   SELECT unnest(string_to_array(a, _delim2))::float8
   FROM   unnest(string_to_array(_str, _delim1)) a
$func$ LANGUAGE sql IMMUTABLE;

使其IMMUTABLE能够优化性能和其他用途。

调用(使用提供的默认值_delim1_delim2):

SELECT * FROM split_string('3.584731 60.739211,3.590472 60.738030');

或者:

SELECT * FROM split_string('3.584731 60.739211,3.590472 60.738030', ',', ' ');

最快的

为了获得最佳性能,请结合translate()使用unnest(string_to_array(...))

SELECT unnest(
          string_to_array(
             translate('3.584731 60.739211,3.590472 60.738030', ' ', ',')
           , ','
          )
       )::float8

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在C ++中的两个定界符上分割字符串

来自分类Dev

在C#中基于两个定界符分割字符串

来自分类Dev

用两个定界符爆炸一个字符串

来自分类Dev

两个相同或不同定界符之间的子字符串(当定界符出现多次时)

来自分类Dev

sh-用定界符分割字符串

来自分类Dev

使用sed用定界符分割字符串

来自分类Dev

用双定界符分割字符串

来自分类Dev

用awk和定界符分割字符串

来自分类Dev

用定界符分割字符串

来自分类Dev

用定界符分割字符串

来自分类Dev

用awk和定界符分割字符串

来自分类Dev

用多个定界符分割字符串,忽略重复的定界符

来自分类Dev

用多个定界符分割字符串,并忽略引号中的定界符javascript

来自分类Dev

用定界符分割字符串并获取第N个元素

来自分类Dev

Java中两个定界符之间的子字符串

来自分类Dev

R语言-提取两个定界符之间的字符串

来自分类Dev

在字符串中的两个定界符之间应用Perl替换

来自分类Dev

当两个定界符在字符串中多次出现时,提取两个定界符之间的所有文本

来自分类Dev

用定界符将字符串分成两个字符串

来自分类Dev

php:用两个定界符将字符串分成3部分,其中第一个和最后一个“定界符”分别是字母或数字

来自分类Dev

根据最后两个定界符将字符串分成两部分

来自分类Dev

如果一个定界符跟在另一个定界符之后,则用定界符分割字符串并检索空白

来自分类Dev

用多个定界符分割字符串,并保留一些定界符,同时丢弃其他定界符

来自分类Dev

使用多字符定界符分割字符串

来自分类Dev

用多字符定界符分割Java字符串

来自分类Dev

Python重新编译,在保留定界符的同时将字符串拆分为两个

来自分类Dev

将文本两个单词提取到字符串内定界符值的LEFT

来自分类Dev

如何使单词/字符串的唯一部分带有两个定界符?

来自分类Dev

正则表达式以匹配两个定界符之间的确切字符串

Related 相关文章

  1. 1

    在C ++中的两个定界符上分割字符串

  2. 2

    在C#中基于两个定界符分割字符串

  3. 3

    用两个定界符爆炸一个字符串

  4. 4

    两个相同或不同定界符之间的子字符串(当定界符出现多次时)

  5. 5

    sh-用定界符分割字符串

  6. 6

    使用sed用定界符分割字符串

  7. 7

    用双定界符分割字符串

  8. 8

    用awk和定界符分割字符串

  9. 9

    用定界符分割字符串

  10. 10

    用定界符分割字符串

  11. 11

    用awk和定界符分割字符串

  12. 12

    用多个定界符分割字符串,忽略重复的定界符

  13. 13

    用多个定界符分割字符串,并忽略引号中的定界符javascript

  14. 14

    用定界符分割字符串并获取第N个元素

  15. 15

    Java中两个定界符之间的子字符串

  16. 16

    R语言-提取两个定界符之间的字符串

  17. 17

    在字符串中的两个定界符之间应用Perl替换

  18. 18

    当两个定界符在字符串中多次出现时,提取两个定界符之间的所有文本

  19. 19

    用定界符将字符串分成两个字符串

  20. 20

    php:用两个定界符将字符串分成3部分,其中第一个和最后一个“定界符”分别是字母或数字

  21. 21

    根据最后两个定界符将字符串分成两部分

  22. 22

    如果一个定界符跟在另一个定界符之后,则用定界符分割字符串并检索空白

  23. 23

    用多个定界符分割字符串,并保留一些定界符,同时丢弃其他定界符

  24. 24

    使用多字符定界符分割字符串

  25. 25

    用多字符定界符分割Java字符串

  26. 26

    Python重新编译,在保留定界符的同时将字符串拆分为两个

  27. 27

    将文本两个单词提取到字符串内定界符值的LEFT

  28. 28

    如何使单词/字符串的唯一部分带有两个定界符?

  29. 29

    正则表达式以匹配两个定界符之间的确切字符串

热门标签

归档