ºìÁªLinuxÃÅ»§
Linux°ïÖú

ÈçºÎÕÆÎÕ Oracle ÖеÄʱ¼ä¼ä¸ôÐÍÊý¾Ý

·¢²¼Ê±¼ä:2006-10-17 00:46:27À´Ô´:ºìÁª×÷Õß:MORR
¡¡¡¡ÔÚ9i °æ±¾ÒÔÇ°£¬Oracle ûÓÐÄÚÖõķ½Ê½À´¼Ç¼ʱ¼äµÄÁ÷ÊÅ¡£DATEÐÍÊý¾ÝÓÃÀ´¼Ç¼µ¥¶ÀµÄʱ¼äµã£»µ«ÊÇÒª±í´ïÒ»¸öʱ¼äÁ¿£¨Ò²¾ÍÊÇÒ»¸ö¼ä¸ô£©£¬Êý¾Ý¿âµÄÉè¼ÆÕ߾ͱØÐë°Ñʱ¼ä¼ä¸ôת»»³Éԭʼµ¥Î»Ã룬ȻºóÓÃÒ»¸öNUMBERÁÐÀ´±£´æËü¡£

¡¡¡¡ËäÈ»NUMBERÕâ¸öÊý¾ÝÀàÐÍ¿ÉÒÔÒÔÃëΪµ¥Î»×¼È·µØ±íʾʱ¼ä£¬µ«ÊÇËüʹµÃʱ¼äµÄ¼ÆËã±äµÃºÜÀ§ÄÑ¡£±ÈÈ磬60ÃëÊÇ1·ÖÖÓ£¬60·ÖÖÓÊÇ1¸öСʱ£¬24¸öСʱµÈÓÚ1Ìì----ÕâЩÊý×ÖÔÚÒÔÊ®½øÖÆΪ»ù´¡µÄÊý×ÖϵͳÖж¼ÊǷdz£õ¿½ÅµÄ¡£

¡¡¡¡ÔÚOracle 9iÖУ¬°´ÕÕSQL 99±ê×¼£¬Ôö¼ÓÁËʱ¼ä¼ä¸ôÐÍÊý¾ÝINTERVAL YEAR TO MONTH ºÍ INTERVAL DAY TO SECOND£¬ËüÃǺÍÆäËû¼¸ÖÖÊý¾ÝÀàÐÍÒ»ÆðʹµÃ¶Ôʱ¼äµÄ´¦Àí¸ü¼Ó׼ȷ¡£TIMESTAMP¡¢TIMESTAMP WITH TIME ZONEºÍTIMESTAMP WITH LOCAL TIME ZONEµÈÊý¾ÝÀàÐͶ¼°Ñʱ¼äµÄ±í´ï¾«È·µ½ÁËÈô¸É·ÖÖ®Ò»Ã룬¶øÇÒºóÃæÁ½ÖÖ»¹½â¾öÁ˵ØÀíλÖÃÔì³ÉµÄʱ¼ä±ä»¯¡£

¡¡¡¡ÔÚSQLºÍPL/SQLÖУ¬Ä㶼¿ÉÒÔÓÃʱ¼ä¼ä¸ôÐÍÊý¾Ý£¬ËüÃǶ¼ÊÇÓÃͬһÖÖ·½Ê½¹æ¶¨µÄ£º

[code]INTERVAL YEAR[(year_precision)] TO MONTH
INTERVAL DAY[(day_precision)] TO SECOND[(fractional_seconds_precision)][/code]

¡¡¡¡¶ÔÓÚ¾«È·ÊýÖµ£¬¹æ¶¨ÓÐȱʡֵ£ºÄêºÍÈÕÊÇÁ½Î»Êý£¬Èô¸É·ÖÖ®Ò»ÃëÊÇÁùλÊý¡£

¡¡¡¡Ê±¼ä¼ä¸ôµÄ´óСÓÉINTERVALÀ´±íʾ£¬ºóÃæ½ô½ÓÒ»¸ö·ÅÔÚµ¥ÒýºÅÖеıí´ïʽ£¬ÒÔ¼°ÓÃÀ´½âÊ͸ñí´ïʽµÄÎÄ×Ö¡£ÓÃYEAR TO MONTH±íʾʱ¼ä¼ä¸ô´óСʱҪÔÚÄêºÍÔÂÖ®¼äÓÃÒ»¸öÁ¬×Ö·û(-) Á¬½Ó¡£¶øDAY TO SECOND±íʾʱ¼ä¼ä¸ô´óСʱҪÔÚÈÕºÍʱ¼äÖ®¼äÓÃÒ»¸ö¿Õ¸ñÁ¬½Ó¡£¾Ù¸öÀý×ÓÀ´Ëµ£¬ÏÂÃæÊÇ2Äê6¸öÔµÄʱ¼ä¼ä¸ôµÄ±íʾ·½·¨£º

[code]INTERVAL '2-6' YEAR TO MONTH[/code]

¡¡¡¡ÏÂÃæµÄÀý×Ó±íʾ3Ìì12¸öСʱ30·ÖÖÓ6.7Ã룺

[code]INTERVAL '3 12:30:06.7' DAY TO SECOND(1)[/code]

¡¡¡¡Ê±¼ä¼ä¸ô¿ÉÒÔΪÕý£¬Ò²¿ÉÒÔΪ¸º¡£ËüÃÇ¿ÉÒÔ´Ó¸÷ÖÖTIMESTAMPÊý¾ÝÀàÐÍÖмÓÉÏ»òÕß¼õÈ¥£¬´Ó¶øµÃµ½Ò»¸öеÄTIMESTAMPÊý¾ÝÀàÐÍ¡£ËüÃÇÖ®¼äÒ²¿ÉÒÔ×ö¼Ó¼õÔËËãµÃµ½ÐµÄʱ¼ä¼ä¸ô¡£

¡¡¡¡ÁбíA˵Ã÷ÁËÔõÑù´´½¨Ò»¸ö±í¸ñÀ´¼Ç¼һ¸öʼþµÄ¿ªÊ¼Ê±¼äºÍ³ÖÐøʱ¼ä£¬ÈçʵÑéµÈ¡£Êý¾Ý±»ÊÕ¼¯ÒÔºó£¬SQLÖÐÄÚÖõÄÕªÒªº¯Êý²»ÐèÒªÓëԭʼµ¥Î»Ãë½øÐÐÏ໥ת»»£¬¾Í¿ÉÒÔ±¨¸æ×ܵijÖÐøʱ¼äºÍƽ¾ù³ÖÐøʱ¼ä¡£
ÎÄÕÂÆÀÂÛ

¹²ÓÐ 1 ÌõÆÀÂÛ

  1. MORR ÓÚ 2006-10-17 00:47:18·¢±í:

    ¡¡¡¡ÁбíA

    [code]CREATE TABLE experiment
    (experiment_id NUMBER(9),
    experiment_desc VARCHAR2(80),
    experiment_start TIMESTAMP,
    experiment_duration INTERVAL DAY(1) TO SECOND(4)
    );

    Table created.

    INSERT INTO experiment
    VALUES (
    1, 'Busted urban myth', '01-JUN-2006 02:00:00 PM',
    INTERVAL '1 2:31:15.1250' DAY(1) TO SECOND(4)
    );

    1 row created.

    col experiment_desc format a40
    col experiment_start format a30
    col experiment_duration format a20

    SELECT * FROM experiment;

    EXPERIMENT_ID EXPERIMENT_DESC
    EXPERIMENT_START EXPERIMENT_DURATION
    1 Busted urban myth 01-JUN-06 02.00.00.000000 PM +1 02:31:15.1250
    -- Now compute the experiment's ending time

    SELECT experiment_id, experiment_start,
    experiment_start + experiment_durationexperiment_end
    FROM experiment;

    EXPERIMENT_ID EXPERIMENT_START
    EXPERIMENT_END
    1 01-JUN-06 02.00.00.000000 PM 02-JUN-06 04.31.15.125000000 PM[/code]

    ¡¡¡¡µ«Òź¶µÄÊÇ£¬ TO_CHARº¯ÊýÖÐûÓаüÀ¨ÈκÎÄܹ»Ó³Éäµ½¸÷¸öʱ¼ä¼ä¸ôÊý¾ÝÀàÐÍƬ¶ÎµÄ¸ñʽģÐÍ¡£µ«ÊÇ£¬Äã¿ÉÒÔÓÃеÄEXTRACTº¯ÊýÀ´ÌáÈ¡ºÍºÏ²¢ÕâЩƬ¶Î¡£¸ñʽÈçÏ£º

    [code]EXTRACT(timepart FROM interval_expression)[/code]

    ¡¡¡¡ÁбíB¸ø³öÁËÒ»¸öÔËÓÃÕâÖÖ·½·¨µÄÀý×Ó¡£

    ¡¡¡¡ÁбíB

    [code]SELECT EXTRACT(DAY FROM experiment_duration) ||
    ' days, ' || EXTRACT (HOUR FROM experiment_duration) ||
    ' hours, ' || EXTRACT (MINUTE FROM experiment_duration) ||
    ' minutes' Duration
    FROM experiment;
    DURATION
    1 days, 2 hours, 31 minutes[/code]

    ¡¡¡¡Ê×ÏÈ£¬´Óexperiment_durationÁÐÖн«ÌìÊýÌáÈ¡³öÀ´£¬ÎÄ×Ö¡°Days¡±ÊÇÓëÖ®ÏàÁªµÄ¡£¶ÔÓÚʵÑé³ÖÐøʱ¼äÖеÄСʱºÍ·ÖÖÓ²¿·Ö£¬²Ù×÷ÓëÉÏÊö·½·¨Ò»Ñù¡£