Обсуждение: Casting pairs of floating point variables as a point in plpgsql

Поиск
Список
Период
Сортировка

Casting pairs of floating point variables as a point in plpgsql

От
ishapiro@cogitations.com (Irv Shapiro)
Дата:
I have a zip code database which includes pairs of floting point
numbers representing latitude and longitude.  I can retieve this data
with the following query:


Declare 
m_zip_info1 char(5);
m_zip_info2 char(5);
m_miles integer;
m_zipcode char(5) := ''60076'';

Begin

select logitude, latitude into m_zip_info1, m_zip_info2    from zipstate where zipcode = m_zipcode;

How do I cast the logitude and latitude floatig point numbers, stored
in my plpgsql variables into a point datatype so I can use it with the
earthdistance function.

I tried the following and it returns a syntax error on the "as":

select cast((m_zip_info1, m_zip_info2) as point) <@>      cast((m_merchant_zip1, m_merchant_zip2) as point) into
m_miles;

I also tried the following, and Postgresql complained about the "::"

select (m_zip_info1,m_zip_info2)::point <@>      (m_merchant_zip1,m_merchant_zip2)::point into m_miles;

Any help would be greatly appreciated.

Irv
ishapiro@cogitations.com


Re: Casting pairs of floating point variables as a point in plpgsql

От
Tom Lane
Дата:
ishapiro@cogitations.com (Irv Shapiro) writes:
> How do I cast the logitude and latitude floatig point numbers, stored
> in my plpgsql variables into a point datatype so I can use it with the
> earthdistance function.

> I tried the following and it returns a syntax error on the "as":

> select cast((m_zip_info1, m_zip_info2) as point) <@>
>        cast((m_merchant_zip1, m_merchant_zip2) as point) into m_miles;

You cannot "cast" two floats into a point (a cast always operates on
a single data value).  However, a moment's perusal of pg_proc shows
that there is a function point(float8,float8), so this should work:

select point(m_zip_info1, m_zip_info2) <@>      point(m_merchant_zip1, m_merchant_zip2) into m_miles;
        regards, tom lane