24 Lut 2016

Obliczenie statystyk przy wykorzystaniu regexp_replace

SELECT
  regexp_replace(
    url,
    E'^http:\/\/.*\/(.*)-(\\d+).html(\\?)?(.*)?',
    E'\\1'
  ) AS t_name,
  regexp_replace(url, E'^.*-(\\d+).html(\\?)?(.*)?', E'\\1') :: INTEGER AS t_id,
  COUNT(*) AS t_cnt
FROM unnest(
    ARRAY [
'http://kody.wig.pl/ustawienie_wartosci_pol_input_w_formularzu_strony-15.html',
'http://kody.wig.pl/ustawienie_wartosci_pol_input_w_formularzu_strony-15.html?
action=test&value1=118-115&value2=119-116'

]
  ) AS t(url)
GROUP BY
  t_name,
  t_id

Wynik:

"ustawienie_wartosci_pol_input_w_formularzu_strony";15;2
15 Lut 2016

Zmiana typlu pola character varying i użycie opcji USING

Dodanie pola do tabeli:

ALTER TABLE posts ALTER COLUMN post_tags TYPE CHARACTER VARYING[]
USING CASE WHEN post_tags IS NULL THEN NULL ELSE string_to_array(post_tags, ', ') END;

SELECT post_tags, string_to_array(post_tags, ',') FROM posts WHERE
post_tags IS NOT NULL LIMIT 5;
-- split_part(post_tags, ',', 2);
13 Lut 2015

Wyszukiwanie punktów po odległości przy użyciu funkcji length

Przykładowy sql:

SELECT *, LENGTH(p_path::path) AS distance FROM (SELECT *, p.p_name, '((54.175540523964, 15.527111972064), ('||p_lat::text||','||p_lng::text||'))' AS p_path
FROM
  points p
WHERE
 p.p_status (p.m_id=5
OR
 (51.175540 < p_lat AND p_lat < 57.17554 AND 12.52711 < p_lng AND p_lng < 18.52711))
ORDER BY
  p.m_id=5 DESC NULLS LAST) t
ORDER BY distance ASC LIMIT 6