精华内容
下载资源
问答
  • Oracle数据库date类型和mysql的date类型是不一样的,Oracle的date类型为YYYY-MM-DD hh:mm:ss和mysql中的datetime类型匹配, 而 mysql 的date类型为 yyyy-mm-dd。关于date和datetime的用法,就要...

    oracle数据库有date类型,但是没有datetime类型

    mysql数据库既有date类型也有datetime类型。 Oracle数据库的date类型和mysql的date类型是不一样的,Oracle的date类型为YYYY-MM-DD hh:mm:ss和mysql中的datetime类型匹配, 而 mysql 的date类型为 yyyy-mm-dd。

    关于date和datetime的用法,就要看你想要存储时间的精确值了,如果仅仅是想要精确到天的话使用date就可以了,如要要精确到秒一级别的就要使用datetime了。有时候大家使用datetime的使用却只是存储到天的日期单位时,这个时候就会自动添加00:00:00在数据的后面,作为秒一级别的数据。

    如果表中的字段是Date类型,插入或查询时需要将字符串类型转换成Date类型,TO_DATE( '2020-07-01 12:30:11', 'yyyy-mm-dd hh24:mi:ss' )或to_date('2010-01-01','yyyy-mm-dd')

    SELECT

    ID,

    STAT_DATE,

    TOTAL_SCAN_PEOPLE_NUM,

    TOTAL_FOLW_NUM,

    TOTAL_LOSS_NUM,

    RETAIN_NUM,

    SCAN_NUM,

    SCAN_PEOPLE_NUM,

    FOLW_NUM,

    LOSS_NUM,

    NET_GROWTH_NUM,

    STAT_ID

    FROM

    T_OFFICIAL_ACCOUT

    WHERE

    (

    STAT_DATE BETWEEN TO_DATE('2020-11-02 00:00:00', 'yyyy-mm-dd hh24:mi:ss')

    AND TO_DATE('2020-11-05 23:59:59', 'yyyy-mm-dd hh24:mi:ss') )

    ORDER BY

    STAT_DATE ASC;

    另外:如果表中有主键,并且已经存在序列,则在插入时,写上ID字段,值用序列的下一个值即可,即CR_TRACEABILITY_SEQ.nextval。

    Oracle数据库不能进行批量插入,即不能一条SQL插入多条记录。

    展开全文
  • Oracle数据库date类型

    2013-11-11 10:35:56
    INSERT INTO TABLE_NAME ODATETIME VALUES(to_date('2013-10-23 21:12:22', 'yyyy-mm-dd hh24-mi-ss')); 查询记录: SELECT to_char(ODATETIME, 'yyyy-mm-dd hh24:mi:ss') odatetime FROM TABLE_NAME;

    插入记录:

    INSERT INTO TABLE_NAME ODATETIME VALUES(to_date('2013-10-23 21:12:22', 'yyyy-mm-dd hh24-mi-ss'));

    查询记录:

    SELECT to_char(ODATETIME, 'yyyy-mm-dd hh24:mi:ss') odatetime FROM TABLE_NAME;

    ===================================================================================

            Year:     
            yy two digits 两位年                显示值:07
            yyy three digits 三位年                显示值:007
            yyyy four digits 四位年                显示值:2007
               
            Month:     
            mm    number     两位月              显示值:11
            mon    abbreviated 字符集表示          显示值:11月,若是英文版,显示nov    
            month spelled out 字符集表示          显示值:11月,若是英文版,显示november
             
            Day:     
            dd    number         当月第几天        显示值:02
            ddd    number         当年第几天        显示值:02
            dy    abbreviated 当周第几天简写    显示值:星期五,若是英文版,显示fri
            day    spelled out   当周第几天全写    显示值:星期五,若是英文版,显示friday       
            ddspth spelled out, ordinal twelfth
                
                  Hour:
                  hh    two digits 12小时进制            显示值:01
                  hh24 two digits 24小时进制            显示值:13
                 
                  Minute:
                  mi    two digits 60进制                显示值:45
                 
                  Second:
                  ss    two digits 60进制                显示值:25
                 
                  其它
                  Q     digit         季度                  显示值:4
                  WW    digit         当年第几周            显示值:44
                  W    digit          当月第几周            显示值:1

    展开全文
  • 浅谈Oracle数据库Date类型查询问题 用过Oracle数据库的朋友应该知道,Oracle数据库在以Date类型为查询条件时存在一个小小的BUG,如: select * from tableName where createDate >= to_dat...
    浅谈Oracle数据库Date类型查询问题


    用过Oracle数据库的朋友应该知道,Oracle数据库在以Date类型为查询条件时存在一个小小的BUG,如:

    select * from tableName where createDate >= to_date('2007-01-01','yyyy-mm-dd') and createDate <= to_date('2007-01-01','yyyy-mm-dd');

    tableName 是指:表名
    createDate 是表tableName的一个列名,为Date类型
    如果我们希望通过上面的语句来查询createDate为2007-01-01当天的记录的话,很遗憾,不管那天有没有数据产生,我们得到的结果都为空,也就是说Oracle数据库在查询时间段内的记录时,记录中不包括截止日期当天所产生的数据,但是很明显我们需要得到包括截止日期当天所产生的数据,只要稍作处理即可:

    select * from tableName where createDate >= to_date('2007-01-01','yyyy-mm-dd') and createDate <= (to_date('2007-01-01','yyyy-mm-dd')+1);

    SELECT A.WORKERID,A.WORKERNUM,A.WORKERNAME,A.WLATITUDE,A.WLONGITUDE,A.WORKSTATUS,A.WNOTE,A.WUPDATE FROM TBWORKER A WHERE 1=1 AND A.WUPDATE >= TO_DATE('2013-07-01 0:24:13','YYYY-MM-DD HH24:mi:ss') ORDER BY A.WUPDATE DESC;

    转载于:https://my.oschina.net/sxdtzhaoxinguo/blog/736958

    展开全文
  • 新的一年愿贪吃不胖 开门见山,对于oracle date类型,无论是oracle开发人员还是DBA都不陌生,今天我们要聊的主题是date类型oracle数据库中的重要性,以及相关PL/SQL代码应该如何检索日期类型的相关命题。...
    7b1b417dd47f42fea2690d4b9adb4861.gif

    新的一年愿贪吃不胖

    722a41e6c6a032286ae14797f33a2b77.png

           开门见山,对于oracle date类型,无论是oracle开发人员还是DBA都不陌生,今天我们要聊的主题是date类型在oracle数据库中的重要性,以及相关PL/SQL代码应该如何检索日期类型的相关命题。文档内容相对基础,请您耐心看完。

    102c6951214e9ded6c74a1e168df8ad0.png

    01

    为什么不建议用varchar2变长字符存储日期类型?

           有的读者会问:为什么不能将DATE存储在VARCHAR2数据类型中,当我们尝试将日期存储为VARCHAR2时,该日期中的每个数字或字母都将成为字符串中的字符,并且存储在自己的字节中,这是一种不太友好的行为。

    c544e9c956428eb6798b863694d5388e.png

           DUMP返回一个VARCHAR2值,其中包含数据类型代码、字节长度和表达式的内部表示。返回的结果总是在数据库字符集中,截图内容返回十进制的计数格式,默认情况下,返回值不包含字符集信息。要检索expr的字符集名称,请向前面的任何格式值添加1000。例如,return_fmt(1008)以八进制形式返回结果,并提供expr的字符集名称。

    4f923e479692b7669450fb6c7a94d04c.png

          这里我们可以清晰的看到date类型返回八进制的计数格式,并且根本不需要太多字节存储,和上面varchar2变长字符有着明显存储容量上的差距

           存储为字符串的日期是不能够按照日期类型形式进行排序的,那么为什么不能够按照日期类型排序呢,我们还是一样,来看看字节数量

    fdd3d15e10176fab7700f3cc4b3a7ea2.png6ab19a9a7b78357236996b46772430ae.png

          我们仔细关注每个数字的ascii码变化顺序,从第七位开始,按照第一个字符的ascii码顺序,然后在由第二个ascii码进行组内排序,并且变长字符的排序需要在逐个字符上递归的完成,这一点在日常sql检索过程中,是非常耗时的。

    cf85e885271d46a0fd06c25b8c92e6df.png

             通过上图仔细观察字符串递归顺序,我们不难发现问题所在。

    阶段性总结

          通过简单的dump信息,我们验证了,为什么不建议用变长字符存储日期类型,第一,浪费存储空间,第二影响排序效果,开发人员如果还是这么做,作为DBA,我们很有必要重新设计表结构了

    102c6951214e9ded6c74a1e168df8ad0.png

    02

    1

    PL/SQL date适用场景

    • 日期也是一种比字符串或数字复杂得多的数据类型。它有多个部分(年、月、日、小时、分、秒、毫秒等等),关于有效日期的组成有许多规则。这里600团队提供了在PL/SQL程序中开始处理日期所需的相关信息

    • PL/SQL中的日期、时间戳和间隔大多数应用程序需要存储和操作日期和时间。与字符串和数字不同,日期非常复杂:不仅是高度格式化的数据,还有许多用于确定有效值和有效计算的规则(闰日和年份、夏令时更改、国家和公司假期、日期范围,等等)。

    • PL/SQL提供了一组真实的日期和时间数据类型,这些数据类型以标准的内部格式存储日期和时间信息,并且它们还有一组用于操作日期和时间的内置函数

    • 有三种格式处理日期和时间

    1. DATE类型—此数据类型存储解析为秒的日期和时间。它不包括时区。DATE是Oracle应用程序中用于处理日期的最古老和最常用的数据类型

    2. TIMESTAMP-Time Stamps类似日期,但有两个关键特征:(1)可以存储和操纵时间解决精确到1000000000秒(9位小数精度),和(2)
      可以关联时区和时间戳、和Oracle数据库将时区时操纵时间戳

    3. INTERVAL-日期和时间戳记录时间中的特定点,而INTERVAL记录并计算时间持续时间。可以以年、月或日、秒为单位指定时间
      间隔

    下面我们针对这三种类型提供一份示例代码

    3b2e0e8b99e661232ae695781f72ef4e.png

    2

    PLSQL date工作原理及其注意事项

           2.1  通常,我们可以使用时间戳来代替日期。与日期数据类型一样,不包含亚秒精度的时间戳占用7字节的存储空间。当时间戳确实包含亚秒数据时,它将占用11字节的存储空间。

           使用带有时区的时间间隔和时间戳可能非常复杂;相对而言,很少有开发人员需要这些更高级的特性。本文主要讨论核心日期和间戳类型,以及最常用的内置函数。

    • 如果需要将时间跟踪到几分之一秒,需要使用一种时间戳类型。

    • 如果需要跟踪数据输入的会话时区,需要使用带有时区的时间戳

    • 如果希望数据库在数据库和会话时区之间自动转换时间,就需要使用带有本地时区的时间戳

    • 当需要与引入任何时间戳数据类型之前编写的现有应用程序保持兼容性时,使用DATE

    • 在PL/SQL代码中使用与底层数据库表相对应或至少兼容的数据类型。例如,在将表中的时间戳值读入日期变量之前,请三思,因为我们可能会丢失信息(在本例中是小数秒,也可能是时区)

    • 获取当前日期和时间。PL/SQL开发人员通常需要检索和处理当前日期和时间。大多数开发人员使用经典的SYSDATE函数,但是Oracle数据库现在提供了几个函数来提供这种信息的变体,如下面的图表显示内容

    6486d210f3588383ebef3c266f707c5d.png

    例:调用SYSDATE和SYSTIMESTAMP以及返回的值

    1ee5677634e07af394a3a2df4974be27.png

          因为我已经将日期和时间戳传递给了BMS_OUTPUT。使用数据库或会话的默认格式掩码(由国家语言设置NLS_DATE_FORMAT参数指定),Oracle数据库隐式地将它们转换为字符串。Oracle数据库的默认安装将默认日期格式设置为DD-MON-YYYY。默认的时间戳格式包括日期偏移量和时区偏移量

    注意:可以执行日期运算:我从SYSDATE返回的值中减去SYSTIMESTAMP返回的值。结果是一个非常接近(但不完全等于)零的区间

      2.2  将日期转换为字符串,并将字符串转换为日期。对于数字,使用TO_CHAR函数的另一个版本将日期或时间戳转换为字符串。与数字一样,Oracle数据库提供了大量的格式元素,可以帮助我们调整字符串,使其显示在程序需要的地方。

            以下是一些例子:

    1

     使用TO_CHAR时不带格式掩码

              使用TO_CHAR时不带格式掩码。如果不包含格式掩码,TO_CHAR返回的字符串将与Oracle数据库执行隐式转换时返回的字符串
    相同:

    1ac8e8f7dc7b0cda668ca34ae4952794.png

    2

    使用TO_CHAR显示日期中的日期和月份的全名

    58bb4285120b8d5dfe4a2b4b893d2514.png

    注意:

    用于显示这些名称的语言是由LS_DATE_LANGUAGE设置确定的,该设置也可以指定为TO_CHAR调用中的第三个参数

    25b9ea8e2f3f4e6887a174bf9f59623a.png

    3

    使用EXTRACT提取并返回日期的指定元素的值

            可以使用EXTRACT提取并返回日期的指定元素的值,例如EXTRACT (YEAR FROM SYSDATE),EXTRACT (DAY FROM

    SYSDATE)

    • 下面的函数可以用来计算一个人的年龄,假设这个人的正确出生日期是函数唯一的参数

    9af147f76797dcfe294fb8f1777eed35.png
    • 从一月的最后一天开始,提前一个月。从不同的日期开始,回溯一个月。从二月的最后一天开始,往回走一个月。下面显示了对ADD_MONTHS函数的三个不同调用以及结果

    c0b7beb6484033004a0e8dce385685fb.png

    下面我们来看一个oracle数据库开发面试的面试题

    01

    Oracle数据库提供了一个函数,用于返回每月最后一天的日期。但是,它没有提供返回第一天日期的函数。下面哪个选项可以用
    来做这个

    1. CREATE OR REPLACE FUNCTION plch_first_day (date_in IN DATE)
      RETURN DATE
      IS
      BEGIN
      RETURN TRUNC (date_in);
      END;
      /

    2. CREATE OR REPLACE FUNCTION plch_first_day (date_in IN DATE)
      RETURN DATE
      IS
      BEGIN
      RETURN TRUNC (date_in, 'MM');
      END;
      /

    3. CREATE OR REPLACE FUNCTION plch_first_day (date_in IN DATE)
      RETURN DATE
      IS
      BEGIN
      RETURN TRUNC (date_in, 'MONTH');
      END;
      /

    4. CREATE OR REPLACE FUNCTION plch_first_day (date_in IN DATE)
      RETURN DATE
      IS
      BEGIN
      RETURN TO_DATE (TO_CHAR (date_in, 'YYYY-MM')
      || '-01', 'YYYY-MM-DD');
      END;

      /

    02

    下面哪个匿名块提供异常部分,以便在执行该匿名块之后,日期和时间2012-01-01 00:00:01将显示出来

    DECLARE
    c_format CONSTANT VARCHAR2 (22) := 'YYYY-MM-DD HH24:MI:SS' ;
    l_new_year DATE := TO_DATE ('2012-01-02 00:00:01', c_format);

    1. BEGIN
      DBMS_OUTPUT.put_line (TO_CHAR (l_new_year - 24, c_format));
      END;

    2. BEGIN
      DBMS_OUTPUT.put_line (TO_CHAR (l_new_year - 1, c_format));
      END;

    3. BEGIN
      DBMS_OUTPUT.put_line (TO_CHAR (l_new_year- 24 * 60 * 60, c_format));
      END;

    4. BEGIN
      DBMS_OUTPUT.put_line (TO_CHAR (TRUNC (l_new_year)- 1+ 1 / (24 * 60 * 60), c_format));
      END;

    面试题答案

    其实很简单,第一个题:如果传递给函数的数字是整数,则plch__and_floor函数总是返回1或0:0,否则返回1,第二道题,1,2两个答案都是OK的。亲,你答对了吗?

    102c6951214e9ded6c74a1e168df8ad0.png

    03

    总结

    • 今天通过一些基础的工作原理,解释了为什么日期存储不选择变长字符串方式,以及字符串方式存储日期格式的诸多不利

    • 通过PL/SQL的工作原理及其简单的案例,为大家分享PL.SQL中如何使用日期函数

    • 最后,如果您对PL/SQL编程感兴趣,如果您苦苦挣扎不知道高效的sql怎么写,可以加入我们,我会尽自己最大努力,让你
      成为PLSQL编程的高手。

    bd68a6f464f8c4ddd68d86a2085c8ec6.png

    好消息!好消息!

        3月中旬开始,600团队开启线上免费公开课,届时请关注600公众号,我们会在公众号注明具体公开课程下载地址,课程完全免费 (划重点)

    福利时间到!

    为表达600团队的真诚,下面为大家

    展示学习大纲,可要仔细阅读哦

    d38baaa5b0a412cca8f40c8a9db113c1.png

    主题包括但不限于如下

    1、结合作者在国网和石化以及五矿做开发DBA实体开发案例和群内其他成员案例;

    2、如何编写高效的SQL语句,以及PLSQL代码;

    3、如何分析awr报告,包括定位问题,诊断问题,如何看懂hanganalyze systemstate errorstack oradebug工具使用等等。

        ? 同时如果公开课反响不错,后期我们也会开放备份恢复,数据库性能优化和sql优化包括工作原理解析等实际生产环境遇到的案例。后期mysql和postgresql包括voltdb geode greenplum以及hadoop如果大家感兴趣,我们都可以在公开课内容体现,暂时以oracle为主,谢谢大家。

    bc592de29b826f951a2ef64e91af7920.png

    风里雨里,我们在600群里等你!!!

    56d9c0412c37a0a19f27ea0eadb47465.png

    最终解释权归600自媒体所有

    展开全文
  • 新的一年愿贪吃不胖 开门见山,对于oracle date类型,无论是oracle开发人员还是DBA都不陌生,今天我们要聊的主题是date类型oracle数据库中的重要性,以及相关PL/SQL代码应该如何检索日期类型的相关命题。...
  • 持久层框架是 mybatis,数据库oracle; 在本地 测试毫无问题,部署到服务器上时: 取当前时间set 的 时候报错java.lang.NoSuchMethodError: ...
  • 以下是对Java中的日期对象与Oracle中的日期之间的区别与联系做点说明,以期对大家有所帮助。new Date():分配 Date 对象并初始化此对象,以表示分配它的时间(精确到毫秒),就是系统当前。new Date(long date) : 分配 ...
  • 环境:  Java 1.5,MyBatis,Oracle10gr2   ...,存入Oracle数据库后,会发现日期全部变为"yyyy-MM-dd 12:00:00”,丢失时间精度。   解决:  思路:统一配置的时间类型。 1、Orac...
  • 原因出在mybatis中的mapper.xml中对象的属性对应的jdbcType=date,jdbcType=date对应的Java类型是java.sql.date,所以没有时分秒。 改为jdbcType=TIMESTAMP,然后sql的时间类型字段用to_char()函数转换 ...
  • 本人使用的是idea,mybatis,oracle,解决办法仅供参考; bug截图: 解决方法:添加服务器/Java应用的虚拟机参数:-Doracle.jdbc.V8Compatible="true" 成功后截图:
  • Oracle数据库Date类型字段读写经验 在Oracle数据库(简体中文)中,date类型的数据字段在存取时会比较麻烦,下面把在学习中的一些经验记录如下:1、在简体中文版的OEM中,从“从表数据编辑器”查看该类型数据显示为...
  • 在项目开发当中使用了jfinal框架,数据库使用的是Oracle,在处理一个表字段类型为Date类型的时候,使用Db.save()方法时,保存的时候使用model.set("create_time",new Date());报了以下错误 六月 26, 2017 5:21:49 ...
  • 项目情况:应由客户要求需要将之前基于jfinal3.0开发的网站...解决过程:1、经过调试发现oracle数据库中Date列实际返回列类型未java.sql.Timestamp;我的第一反应就是更改参数类型,将之前java.util.Date类型改成j...
  • java实体类定义的是java.util.date类型。 页面直接用这个字段作为name,提交时,通过getName获得地段。 可是页面传过来是string ,而实体类是date类型,出错,该如果解决 另个oracle DD-MM-YY (20-01-80) 这个...
  • 以下是对Java中的日期对象与Oracle中的日期之间的区别与联系做点说明,以期对大家有所帮助。new Date():分配 Date 对象并初始化此对象,以表示分配它的时间(精确到毫秒),就是系统当前。new Date(long date) : ...
  • 以下是对Java中的日期对象与Oracle中的日期之间的区别与联系做点说明,以期对大家有所帮助。 new Date():分配 Date 对象并初始化此对象,以表示分配它的时间(精确到毫秒),就是系统当前。 new Date(long date) :...
  • Oracle数据库Date类型字段读写经验

    千次阅读 2004-08-27 11:37:00
    Oracle数据库(简体中文)中,date类型的数据字段在存取时会比较麻烦,下面把在学习中的一些经验记录如下:1、在简体中文版的OEM中,从“从表数据编辑器”查看该类型数据显示为如下格式:26-八月-2004 03:37:36 PM...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,533
精华内容 613
关键字:

oracle数据库date类型