10.3. ÇÔ¼ö

ÇÔ¼ö È£Ãâ·Î »ç¿ëµÇ´Â ƯÁ¤ÀÇ ÇÔ¼ö´Â ÀÌÇÏÀÇ ¼ø¼­¿¡ µû¶ó ÇØ°áµË´Ï´Ù.

ÇÔ¼ö ÇüÅÂÀÇ ÇØ°á

  1. pg_proc½Ã½ºÅÛ Ä«Å»·Î±×·ÎºÎÅÍ, Á¶»çÀÇ ´ë»óÀ¸·Î ÇÏ´Â ÇÔ¼ö¸¦ ¼±ÅÃÇÕ´Ï´Ù. ¼ö½ÄµÇ¾î ÀÖÁö ¾ÊÀº ÇÔ¼ö¸íÀÌ »ç¿ëµÇ´Â °æ¿ì, Á¶»çÀÇ ´ë»óÀÌ µÇ´Â ÇÔ¼ö´Â, ÇöÇàÀÇ º¼ ¼ö ÀÖ´Â °Ë»ö °æ·Î·Î µÇ¾î ÀÖ´Â, µ¿ÀÏÇÑ À̸§°ú ÀÎÀÚÀÇ ¼ö¸¦ °¡Áö´Â ÇÔ¼ö°¡ Á¶»ç ´ë»óÀ̶ó°í °í·ÁµË´Ï´Ù. (Section 5.7.3¸¦ ÂüÁ¶ÇØ ÁÖ¼¼¿ä). ¼ö½ÄµÈ ÇÔ¼ö¸íÀÌ ÁÖ¾îÁö°í ÀÖ´Â °æ¿ì, ÁöÁ¤µÈ ½ºÅ°¸¶ÀÇ ÇÔ¼ö¸¸ÀÌ Á¶»ç ´ë»óÀ¸·Î °£Áֵ˴ϴÙ.

    1. °Ë»ö °æ·Î·Î, ÀÎÀÚÀÇ µ¥ÀÌÅÍÇüŰ¡ °°Àº º¹¼öÀÇ ÇÔ¼ö¸¦ °ËÃâÇßÀ» °æ¿ì, ±× °æ·Î·Î ÃÖÃÊ·Î °ËÃâµÈ ÇÔ¼ö¸¸À» Á¶»ç ´ë»óÀ¸·Î °£ÁÖÇÕ´Ï´Ù. ´Ù¸¸, ÀÎÀÚÀÇ µ¥ÀÌÅÍÇüŰ¡ ´Ù¸¥ ÇÔ¼ö´Â, °Ë»ö °æ·Î³»ÀÇ À§Ä¡¿¡ °ü°è¾øÀÌ, ¶È°°ÀÌ Á¶»çÇÒ ¼ö ÀÖ½À´Ï´Ù.

  2. Á¤È®ÇÏ°Ô ÀÔ·Â ÀÎÀÚÇüŸ¦ ¹Þ¾ÆµéÀÌ´Â ÇÔ¼ö°¡ ÀÖ´ÂÁö¸¦ °Ë»çÇÕ´Ï´Ù. ÇØ´çÇÏ´Â ÇÔ¼ö°¡ ÀÖÀ¸¸é(Á¶»çµÇ´Â ÇÔ¼öÀÇ ÁýÇÕ³»¿¡¼­ Á¤È®ÇÏ°Ô ÀÏÄ¡ÇÏ´Â °ÍÀº 1°³ ¹Û¿¡ ¾ø½À´Ï´Ù), ±×°ÍÀ» »ç¿ëÇÕ´Ï´Ù (unknown¸¦ Æ÷ÇÔÇÑ °æ¿ì´Â, ÀÌ ´Ü°è¿¡¼­ ÀÏÄ¡ÇÏ´Â °ÍÀº Àý´ë ¹ß°ßµÇÁö ¾Ê½À´Ï´Ù).

  3. Á¤È®ÇÏ°Ô ÀÏÄ¡ÇÏ´Â °ÍÀÌ Á¸ÀçÇÏÁö ¾Ê´Â °æ¿ì, ±× ÇÔ¼ö È£ÃâÀÌ Æò¹üÇÑ ÇüÅ º¯È¯À» ¿ä±¸ÇÏ´ÂÁö È®ÀÎÇÕ´Ï´Ù. À̰ÍÀº, ÇÔ¼ö È£ÃâÀÌ ´Ù¸¸ 1°³ÀÇ ÀÎÀÚ¸¦ ÃëÇØ, ÇÔ¼ö¸íÀÌ ¾î¶°ÇÑ µ¥ÀÌÅÍÇüÅÂÀÇ(³»ºÎÀûÀÎ) À̸§°ú µ¿ÀÏÇÑ °æ¿ì¿¡ ¹ß»ýÇÕ´Ï´Ù. °Ô´Ù°¡ ±× ÇÔ¼öÀÇ ÀÎÀÚ´Â, unknownÇüÅÂÀÇ ¹®ÀÚ»ó¼ö³ª ÁöÁ¤µÈ µ¥ÀÌÅÍÇüÅÂ¿Í ÁöÁ¤µÈ µ¥ÀÌÅÍ ÇüÅÂ¿Í ¹ÙÀ̳ʸ® ¼öÁØ È£È¯ÀûÀ̾î¾ß ÇÕ´Ï´Ù. ÀÌ·¯ÇÑ Á¶°Ç¿¡ ¸Â´Â °æ¿ì, ÇÔ¼ö ÀÎÀÚ´Â ¾î¶°ÇÑ ½ÇÁúÀûÀÎ ÇÔ¼ö È£Ãâ ¾øÀÌ ÁöÁ¤µÈ µ¥ÀÌÅÍ ÇüÅ·Πº¯È¯µË´Ï´Ù.

  4. ÃÖ¼±ÀÇ °æ¿ì¸¦ º¾½Ã´Ù.

    1. ÇÔ¼öÀÇ Èĺ¸ °¡¿îµ¥, ÀÔ·ÂÄ¡ÀÇ µ¥ÀÌÅÍÇüŰ¡ ÀÏÄ¡ÇÏÁö ¾Ê°í, ¶Ç, (ÇÔÃà º¯È¯ ÇÔ¼ö¸¦ »ç¿ëÇØ) ÀÏÄ¡Çϵµ·Ï º¯È¯ÇÒ ¼ö ¾ø´Â °ÍÀ» Á¦°ÅÇÕ´Ï´Ù. unknown¹®ÀÚ»ó¼ö´Â, »ó±âÀÇ ¸ñÀûÀ¸·Î ¹«¾ùÀÌ¶óµµ º¯È¯ °¡´ÉÇÏ´Ù°í °£ÁÖÇØÁý´Ï´Ù. 1°³ÀÇ Èĺ¸ ¹Û¿¡ ³²Áö ¾Ê´Â °æ¿ì, ±×°ÍÀ» »ç¿ëÇÕ´Ï´Ù. ±× ÀÌ¿ÜÀÇ °æ¿ì´Â ´ÙÀ½ÀÇ ´Ü°è·Î ³ª¾Æ°©´Ï´Ù.

    2. ¸ðµç È常¦ °Ë»öÇØ, ÀÔ·ÂÇüÅ¿¡ °¡Àå Á¤È®ÇÏ°Ô ¸Â´Â °ÍÀ» ³²±é´Ï´Ù (ÀÌ ¶§, µµ¸ÞÀÎÀº ±× ±âº»ÇüÅÂ¿Í µ¿ÀÏÇÏ´Ù¶ó°í °£ÁÖÇÕ´Ï´Ù). Á¤È®ÇÏ°Ô ¸Â´Â °ÍÀÌ ¾Æ¹«°Íµµ ¾øÀ¸¸é ¸ðµç È常¦ ³²±é´Ï´Ù. 1°³ÀÇ Èĺ¸ ¹Û¿¡ ³²Áö ¾Ê´Â °æ¿ì, ±×°ÍÀ» »ç¿ëÇÕ´Ï´Ù. ±× ÀÌ¿ÜÀÇ °æ¿ì´Â ´ÙÀ½ÀÇ ´Ü°è·Î ³ª¾Æ°©´Ï´Ù.

    3. ¸ðµç È常¦ °Ë»öÇØ, ÇüÅ º¯È¯ÀÌ ÇÊ¿äÇÏ°Ô µÇ´Â °÷Áß¿¡(ÀÔ·Â µ¥ÀÌÅÍÇüÅ ¸ñ·ÏÀÇ) ¹Ù¶÷Á÷ÇÑ ÇüŸ¦ ¹Þ¾ÆµéÀÌ´Â °ÍÀ» ³²±é´Ï´Ù. ¹Ù¶÷Á÷ÇÑ ÇüŸ¦ ¹Þ¾ÆµéÀÌ´Â °ÍÀÌ ¾Æ¹«°Íµµ ¾øÀ¸¸é ¸ðµç È常¦ ³²±é´Ï´Ù. 1°³ÀÇ Èĺ¸ ¹Û¿¡ ³²Áö ¾Ê´Â °æ¿ì, ±×°ÍÀ» »ç¿ëÇÕ´Ï´Ù. ±× ÀÌ¿ÜÀÇ °æ¿ì´Â ´ÙÀ½ÀÇ ´Ü°è·Î ³ª¾Æ°©´Ï´Ù.

    4. ÀÔ·Â ÀÎÀÚ·ÎunknownÀÇ °ÍÀÌ ÀÖ´Â °æ¿ì, ±×·¯ÇÑ ³²Àº Èĺ¸¿¡ ÀÎÀÚ À§Ä¡¿¡¼­ ¹Þ¾Æµé¿©Áö´Â ÇüÅ ¸ñ·ÏÀ» °Ë»çÇÕ´Ï´Ù. °¢°¢ÀÇ À§Ä¡¿¡¼­ È帰¡string¸ñ·ÏÀ» ¹Þ¾ÆµéÀÌ´Â °æ¿ì´Â, ±× ¸ñ·ÏÀ» ¼±ÅÃÇÕ´Ï´Ù (unknown ÇüÅÂÀÇ ¹®ÀÚ»ó¼ö´Â ¹®ÀÚ¿­°ú °°Àº °ÍÀ̹ǷÎ, ÀÌ ¹®ÀÚ¿­Àº ÀûÀýÇÕ´Ï´Ù). ±×·¸Áö ¾ÊÀ¸¸é, ¸¸¾à ³²Àº ¸ðµç È帰¡ °°Àº ÇüÅ ¸ñ·ÏÀ» ¹Þ¾ÆµéÀÌ´Â °æ¿ì´Â ±× ¸ñ·ÏÀ» ¼±ÅÃÇÕ´Ï´Ù. ±×·¸Áöµµ ¾ÊÀ¸¸é, ÇÑÃþ ´õ ½Ç¸¶¸®°¡ ¾øÀ¸¹Ç·Î ¿Ã¹Ù¸¥ ¼±ÅÃÀÌ ¿¬¿ª µÉ ¼ö°¡ ¾ø±â ¶§¹®¿¡, ½ÇÆÐ°¡ µË´Ï´Ù. ¿©±â¼­, ¼±ÅÃµÈ ÇüÅ ¸ñ·ÏÀ» ¹Þ¾ÆµéÀÌÁö ¾Ê´Â ¿¬»êÀÚ È帴 Á¦°ÅµË´Ï´Ù. °Ô´Ù°¡ ÁÖ¾îÁø ÀÎÀÚÀÇ À§Ä¡»óÀÇ ¹Ù¶÷Á÷ÇÑ ÇüŸ¦ ¹Þ¾ÆµéÀÌ´Â È帰¡ ÇϳªÀ̱⵵ ÇÑ °æ¿ì, ±× ÀÎÀÚÀÇ ¹Ù¶÷Á÷ÇÑ ÇüŰ¡ ¾Æ´Ñ °ÍÀ» ¹Þ¾ÆµéÀÌ´Â È帴 Á¦°ÅµË´Ï´Ù.

    5. 1°³ÀÇ Èĺ¸ ¹Û¿¡ ³²Áö ¾Ê´Â °æ¿ì, ±×°ÍÀ» »ç¿ëÇÕ´Ï´Ù. ¸¸¾à È帰¡ ¾ø´Â, ȤÀº 1°³º¸´Ù ¸¹Àº È帰¡ ³²´Â °æ¿ì´Â ½ÇÆÐÇÕ´Ï´Ù.

ÀÌ"ÃÖ¼±ÀÇ °æ¿ì"±ÔÄ¢Àº ¿¬»êÀÚ¿Í ÇÔ¼öÀÇ ÇüÅÂ ÇØ°á°ú µ¿ÀÏÇÑ °ÍÀ̹ǷΠÁÖÀÇÇØ ÁÖ¼¼¿ä. ÀÌÇÏ¿¡ ¿¹¸¦ ³ªÅ¸³À´Ï´Ù.

Example 10-4. ¶ó¿îµå ÇÔ¼ö ÀÎÀÚ ÇüÅÂÀÇ ÇØ°á

2°³ÀÇ ÀÎÀÚ¸¦ ÃëÇÏ´ÂroundÇÔ¼ö´Â 1°³ ¹Û¿¡ ¾ø½À´Ï´Ù ( Á¦1 ÀÎÀÚ´Ânumeric, Á¦2 ÀÎÀÚ´ÂintegerÀÔ´Ï´Ù). ±×·¯´Ï±î, ÀÌÇÏÀÇ Äõ¸®´Â ÀÚµ¿ÀûÀ¸·Î,integerÇüÅÂÀÇ Á¦1 ÀÎÀÚ¸¦numeric·Î º¯È¯ÇÕ´Ï´Ù.

SELECT round(4, 4);

 round
--------
 4.0000
(1 row)

Àú Äõ¸®´Â ÆÄ¼­¿¡ ÀÇÇØ ½ÇÁúÀûÀ¸·Î ÀÌÇÏ¿Í °°ÀÌ º¯ÇüµË´Ï´Ù.

SELECT round(CAST (4 AS numeric), 4);

¼Ò¼öÁ¡À» °¡Áö´Â ¼öÄ¡ Á¤¼ö´Â ¿ì¼±numeric¿¡ ÇÒ´çÇÒ ¼ö Àֱ⠶§¹®¿¡, ÀÌÇÏÀÇ Äõ¸®¿¡¼­´Â ÇüÅ º¯È¯ÀÌ ºÒÇÊ¿äÇÕ´Ï´Ù. µû¶ó¼­ Á» ´õ È¿À²Àû ÀÔ´Ï´Ù.

SELECT round(4.0, 4);

Example 10-5. ¼­ºê½ºÆ®¸µ ÇÔ¼öÀÇ ÇüÅÂ ÇØ°á

substrÇÔ¼ö´Â º¹¼ö Á¸ÀçÇÕ´Ï´Ù. ±× Áß 1°³´Âtext¿ÍintegerÇüŸ¦ ÃëÇÕ´Ï´Ù. ÇüÅÂÀÇ ÁöÁ¤ÀÌ ¾ø´Â ¹®ÀÚ¿­ »ó¼ö·Î È£ÃâÇßÀ» °æ¿ì, ½Ã½ºÅÛÀº ¹Ù¶÷Á÷ÇÑ ¸ñ·Ïstring(ÁïtextÇüÅÂ)ÀÇ ÀÎÀÚ¸¦ ¹Þ¾ÆµéÀÌ´Â Èĺ¸ ÇÔ¼ö¸¦ ¼±ÅÃÇÕ´Ï´Ù.

SELECT substr('1234', 3);

 substr
--------
     34
(1 row)

¹®ÀÚ¿­ÀÌvarcharÇüŶó°í ¼±¾ðµÇ¾úÀ» °æ¿ì, À̰ÍÀº Å×ÀÌºí¿¡¼­ ²¨³ÂÀ» °æ¿ì·Î ÃßÃøµÇÀÚ¸¸, ÆÄ¼­´Â ±×°ÍÀ»text°¡ µÇµµ·Ï º¯È¯ÇÏ·Á°í ½ÃµµÇÕ´Ï´Ù.

SELECT substr(varchar '1234', 3);

 substr
--------
     34
(1 row)

À̰ÍÀº È¿À²ÀûÀ¸·Î ÀÌÇÏ¿Í °°ÀÌ µÇµµ·Ï ÆÄ¼­¿¡ ÀÇÇØ º¯È¯µË´Ï´Ù.

SELECT substr(CAST (varchar '1234' AS text), 3);

Note: ÆÄ¼­´Âpg_castīŻ·Î±×·ÎºÎÅÍtext¿Ívarchar°¡ ÀÌÁø ¼öÁØÀÇ È£È¯¼º, Áï, ¾î¶°ÇÑ ¹°¸®ÀûÀÎ º¯È¯À» ½Ç½ÃÇÏ´Â ÀÏ ¾øÀÌ ÇÑÂÊÀ» ¹Þ¾ÆµéÀÌ´Â ÇÔ¼ö¿¡ ´Ù¸¥ ÇÑÂÊÀ» °Ç³×ÁÙ ¼ö°¡ ÀÖ´Â °ÍÀ» ÇнÀÇÕ´Ï´Ù. µû¶ó¼­, ÀÌ °æ¿ì ½ÇÁ¦·Î »ðÀԵǴ ÇüÅ º¯È¯ È£ÃâÀº ¾ø½À´Ï´Ù.

¶Ç,integerÇüÅÂÀÇ ÀÎÀÚ·Î ÀÌ ÇÔ¼ö°¡ ºÒ·Á °¬À» °æ¿ì, ÆÄ¼­´Â ±×°ÍÀ»text·Î º¯È¯ÇÏ·Á°í ½ÃµµÇÕ´Ï´Ù.

SELECT substr(1234, 3);
ERROR:  function substr(integer, integer) does not exist
HINT:  No function matches the given name and argument types.  You might need
to add explicit type casts.

À̰ÍÀº ½ÇÁ¦·Î ´ÙÀ½°ú °°ÀÌ ½ÇÇàµË´Ï´Ù.

SELECT substr(CAST (1234 AS text), 3);

ÀÌ·¯ÇÑ ÀÚµ¿Àû º¯È¯Àº integer¿¡¼­ text·Î ÇÔÃàÀûÀ¸·Î È£Ãâ°¡´ÉÇÑ Ä³½ºÆ®°¡ Àֱ⠶§¹®¿¡ °è¼ÓÇØ¼­ ÀϾ ¼ö ÀÖ½À´Ï´Ù.