10.2. ������

һ�β��������õIJ����������ǰ�������Ĺ��̽����ġ� ��ע����������ܱ����ò����������ȼ��ļ��Ӱ�졣 ���� Section 4.1.6 ��ȡ������Ϣ��

���������ͽ���

  1. �� pg_operator ϵͳ����ѡ��Ҫ���ǵIJ������� ���ʹ����һ���������εIJ���������������״������ ��ô��Ϊ�ò���������Щ�ڵ�ǰ������·�������ֺͲ���������ȷ�ĺ��������� Section 5.8.3���� �������һ�������εIJ�����������ôֻ����ָ����ģʽ�еIJ�������

    1. �������·�����ҵ��˶����ͬ�������͵IJ���������ôֻ�������������·���еġ� ���Dz�ͬ�������͵IJ�����������ͬ�Ļ������п��ǣ�������������·���е�λ����Ρ�

  2. ���һ���������Ƿ�պý�������������͡� �������һ�����ڿ��ǵIJ������У�����ֻ����һ����ȷƥ��ģ��� ����֮��

    1. ���һ��˫Ŀ�����������е�һ�������� unknown�� ���ڱ��μ���м���������һ������������ͬ�� �����漰 unknown ���������������һ���ҵ�ƥ�䡣

  3. Ѱ������ƥ�䡣

    1. ������Щ�������Ͳ�ƥ�䲢��Ҳ����ǿ��ת����ʹ������ת����������ƥ��ĺ�ѡ�������� unknown �ı�����������±���Ϊ�ǿ���ת�����κζ��������ֻʣ��һ����ѡ���֮�� ���������һ����

    2. �������к�ѡ��������������Щ�������������׼ȷƥ��ġ� ������������£��򱻿��������ǵĻ���������ͬ���� ���û����ȫ׼ȷƥ��IJ��������������к�ѡ�� ���ֻ��һ������֮�����������һ����

    3. �������к�ѡ��������������Щ��Ҫ����ת��ʱ���λ�ý��ܣ������������͵����ͷ���ģ���ѡ���͵ġ� ���û�н�����ѡѡ���͵IJ��������������к�ѡ�� ���ֻ��һ������֮�����������һ����

    4. ����κ���������� unknown�����ʣ�µĺ�ѡ��������Ӧ����λ�õ����ͷ��롣 ����κκ�ѡ����������string���ͣ�������Щλ��ѡstring���� �����������Ϊ�ִ��Ǻ��ʵģ���Ϊ unknown �����ı�ȷʵ���ִ����� �����������ʣ�µĺ�ѡ������������ͬ�����ͣ�ѡ������ͣ� �����׳�һ��������Ϊ��û�и��������������²��ܵ�����ȷ��ѡ�� ��������������ѡ�������ͱ�ĺ�ѡ��������Ȼ�� ��������ѡ��������ij�������IJ���λ�ý���һ����ѡ���ͣ� ��������Щ�ڸò���λ�ý��ܷ���ѡ���͵ĺ�ѡ��������

    5. ���ֻʣ��һ������������֮�� ������г���һ���ĺ�ѡ����������û�к�ѡ�������������һ������

������һЩ���ӡ�

Example 10-1. ָ�����������ͽ���

�ڷ�����ֻ��һ��ָ�������������� double precision ��Ϊ������ɨ�����������ѯ���ʽ�������������� integer �ij�ʼ���ͣ�

SELECT 2 ^ 3 AS "exp";

 exp
-----
   8
(1 row)

������������������������ת������ѯ��Ч�ڣ�

SELECT CAST(2 AS double precision) ^ CAST(3 AS double precision) AS "exp";

Example 10-2. �ִ����Ӳ��������ͷ���

һ�����ַ������﷨�ȿ��������ַ���Ҳ�������ڸ��ӵ���չ���͡� �����������͵��ִ�ʹ�ÿ��ܵĺ�ѡ������ƥ�䡣

��һ��δ�����IJ��������ӣ�

SELECT text 'abc' || 'def' AS "text and unknown";

 text and unknown
------------------
 abcdef
(1 row)

�����з�����Ѱ��һ�������������� text �IJ���������Ϊ��һ�������IJ�����������Ϊ��һ�������������� text��

����������δ�������ͣ�

SELECT 'abc' || 'def' AS "unspecified";

 unspecified
-------------
 abcdef
(1 row)

�����ж������κγ�ʼ��ʾ����Ϊ��ѯ��û�������κ����͡� ��ˣ��������������в�������ͬʱ�����ַ������λ����ĺ�ѡ�������� ��Ϊ�ڿ���ʱ�ִ�������ѡ������ѡ��ñ������ִ�����ѡ���ͣ� text����Ϊ����δ֪�����ı����������͡�

Example 10-3. ����ֵ��ȡ�����������ͷ���

PostgreSQL �������������м�����¼����ǰ׺������ @�� ������Щ����Ϊ������ֵ����ʵ�־���ֵ�����ġ�������һ���������� float8�� ������ֵ���е���ѡ���͡���ˣ� ����Է���ֵ�����ʱ��PostgreSQL ��ʹ�ø����͡�

select @ text '-4.5' as "abs";
 abs
-----
 4.5
(1 row)

������ϵͳ��Ӧ��ѡ���IJ�����֮ǰִ����һ��text��float8��ת�������ǿ�����֤����float8����������ʲô���ͣ�

select @ text '-4.5e500' as "abs";

ERROR:  Input '-4.5e500' is out of range for float8

��һ���棬ǰ׺������ ~ ����λȡ���� ֻΪ�����������Ͷ��壬 ������Ϊfloat8����ġ���ˣ���������� ~ ������ʵ�飬���У�

SELECT ~ '20' AS "negation";

ERROR:  operator is not unique: ~ "unknown"
HINT:  Could not choose a best candidate operator. You may need to add explicit
type casts.

������Ϊϵͳ�޷������ü������ܵ� ~ ��������Ӧ�����ĸ������ǿ�������ȷ������ת����������

SELECT ~ CAST('20' AS int8) AS "negation";

 negation
----------
      -21
(1 row)