发布新日志

  • TO_DATE TO_CHAR

    2008-11-27 17:31:42

    TO_DATE TO_CHAR 函数用法总结
     
    今天在查数据时,遇到这样的问题,顺便来汇总一下遗忘的东西。
    一、TO_DATE:

    spl> select * from emp
             where dates
             between
             to_date('2007-06-12 10:00:00', 'yyyy-mm-dd hh24:mi:ss')
             and
             to_date('2007-06-12 10:00:00', 'yyyy-mm-dd hh24:mi:ss')

            当省略HH、MI和SS对应的输入参数时,Oracle使用0作为DEFAULT值。如果输入的日期数据忽略时间部分,Oracle会将时、分、秒部分都置为0,也就是说会取整到日。

            同样,忽略了DD参数,Oracle会采用1作为日的默认值,也就是说会取整到月。

            但是,不要被这种“惯性”所迷惑,如果忽略MM参数,Oracle并不会取整到年,取整到当前月。

          注意:

           1.在使用Oracle的to_date函数来做日期转换时,可能会直觉地采用“yyyy-MM-dd HH:mm:ss”的格式作为格式进行转换,但是在Oracle中会引起错误:“ORA 01810 格式代码出现两次”。如:select to_date('2005-01-01 13:14:20','yyyy-MM-dd HH24:mm:ss') from dual;
    原因是SQL中不区分大小写,MM和mm被认为是相同的格式代码,所以Oracle的SQL采用了mi代替分钟。select to_date('2005-01-01 13:14:20','yyyy-MM-dd HH24:mi:ss') from dual;
           2.另要以24小时的形式显示出来要用HH24
    select to_char(sysdate,'yyyy-MM-dd HH24:mi:ss') from dual;//mi是分钟
    select to_char(sysdate,'yyyy-MM-dd HH24:mm:ss') from dual;//mm会显示月份

    二、TO_CHAR ( date [, fmt [, 'nlsparam'] ])

           它的作用是将一个日期date转换成一个指定格式fmt的字符串。有关nlsparam基本可以不管,它是用来确定返回的日期的名字以及缩写词等的形式,如你的数据库语言如果是英语,那么返回的月份表示可能是类似这样的“MAY”;而如果你的数据库语言是汉语,那么返回的月份表示可能是类似这样的“五月”。nlsparam就是用来改变这些显示,如假设你的数据库语言是汉语,而你像把它变成英语的表示,则可以这样设置:nls_date_language=’english’。99%可以不用管这个参数。如下面这个例子:

    10:13:29 SQL> select to_char(sysdate,'yyyy-mm-dd') today from dual;

    找到了一些例子:
    题目:数据库表A,字段commit_time存的数据是:20080301112536等。现在我要查询出今天在9:00到10:00,15:00至16:00时间段的数据。请问如何写这样的语句。
    方法一:
    select * from youtablename where commit_time>=to_char(sysdate,'yyyymmdd')||'0900' and commit_time <=to_char(sysdate,'yyyymmdd')||'1000'

    select * from youtablename where commit_time>=to_char(sysdate,'yyyymmdd')||'1500' and commit_time <=to_char(sysdate,'yyyymmdd')||'1600'
    方法二:
    select *
    from youtablename 
    where commit_time between to_char(sysdate,'yyyymmdd')||'0900' and to_char(sysdate,'yyyymmdd')||'1000'
    UNION ALL
    select *
    from youtablename 
    where commit_time between to_char(sysdate,'yyyymmdd')||'1500' and to_char(sysdate,'yyyymmdd')||'1600'
    方法三:
    取今天 9:00 可以这样

    trunc(sysdate) + to_dsinterval('0 09:00:00')

    to_dsinterval 函数的作用是固定格式的字符串('day hh:mi:ss')转换成时间段。这个时间段可以和 date 数据类型作 +/- 操作

    例如 select trunc(sysdate) + to_dsinterval('0 09:00:00') from dual;

    此方法用在楼上 sql 语句的 between 部分就可以了。
    方法四:
    select * from A where substr(commit_time, 9) between '090000' and '100000' or substr(commit_time, 9) between '150000' and '160000'
    如果不含后面的时间点则应该为:
    select * from A where substr(commit_time, 9) between '090000' and '095959' or substr(commit_time, 9) between '150000' and '155959'
    方法五:
    使用 trunc(commit_time,'ss') 来查询,优化.
    字段commit_time应当设定为timestamp类型,这样就方便啦

     

     

     

     

  • 知识积累

    2008-07-29 11:58:06

     

    在大家写脚本的时候,我们常常用set语句在设置一些需要的格式规范。下面,列举了几个常见set语句的应用。

    SQL> set echo on—————————————————设置运行命令是是否显示语句

    SQL> set feedback on———————————————-设置显示“已选择XX行”

    SQL> set colsep | —————————————————设置列与列之间的分割符号

    SQL> set pagesize 10———————————————–设置每一页的行数

    SQL> SET SERVEROUTPUT ON——————————-设置允许显示输出类似dbms_output.putline

    SQL> set heading on————————————————设置显示列名

    SQL> set timing on————————————————–设置显示“已用时间:XXXX”

    SQL> set time on—————————————————–设置显示当前时间

    SQL> set autotrace on———————————————–设置允许对执行的sql进行分析

    例子:

    set pagesize 0
    set long 90000
    set feedback off
    set echo off 
    spool te.sql  --你要导出的文件名及路径(我这里用的是默认路径)
    connect  ; --登录用户名/密码@数据库名
    SELECT DBMS_METADATA.GET_DDL('TABLE',u.table_name)
    FROM USER_TABLES u;
    SELECT DBMS_METADATA.GET_DDL('INDEX',u.index_name)
    FROM USER_INDEXES u;
    spool off;
    C:\Program Files\Windows Live

  • chkdsk 命令

    2008-04-14 12:58:58

      郁闷!新的一周,我却遇上了麻烦的事情,早上在水房洗脸时,发现自己昨晚洗的睡衣不见了,急着上班,也没有再想,不见就不见吧!旧的不去新的不来,人有时就得这样安慰自己,呵呵!

      到了公司,更郁闷的事来的,我以前整理的测试数据信息,一下子打不开了,系统提示文件不存在,或被删除!怎么可能,我查了一下系统日志,“弹出的应用程序:windows-损坏文件:文件或目录 c:\陈\我的测试数据.xls已经损坏且无法读取。请运行Chkdsk工具。”看到这个信息,我无语。我想重启一下电脑,谁知更残,原来只是打不开文件,现在连文件都找不到。我的测试数据呀!、、、、、、

      以后重要的资料一定要备份一下。虽说用下面的方法也没有把数据恢复过来,但是还是学习了一些东西。用数据恢复工具太慢,而且恢复的几乎不太,我也没有在上面花费时间。趁着自己还有印像赶快重新写一份吧!

       在网上查了一下Chkdsk,这个windows系统自带的命令,其用法如下  基于所用的文件系统,创建和显示磁盘的状态报告。Chkdsk 还会列出并纠正磁盘上的错误。如果不带任何参数,chkdsk 将显示当前驱动器中的磁盘状态。

    语法
    chkdsk [volume:][[Path] FileName] [/f] [/v] [/r] [/x] [/c] [/l[:size]]

    参数
    volume:
    指定驱动器号(冒号分隔)、装入点或卷名。
    [Path} FileName]
    指定需要 chkdsk 检查碎片整理的文件或文件集的位置和名称。使用通配符(* 和 ?)可以指定多个文件。
    /f
    修复磁盘上的错误。必须锁定磁盘。如果 chkdsk 无法锁定驱动器,则会显示一条消息,询问您是否希望在下次重新启动计算机时检查该驱动器。
    /v
    当检查磁盘时,显示所有目录中每个文件的名称。
    /r
    找到坏扇区并恢复可读取的信息。必须锁定磁盘。
    /x
    仅在 NTFS 上使用。如果必要,首先强制卸载卷。该驱动器的所有打开句柄都无效。/x 还包含了/f 的功能。
    /i
    仅随 NTFS 使用。对索引项执行充分检查,降低运行 chkdsk 的所用时间量。
    /c
    仅随 NTFS 使用。跳过文件夹结构中的周期检查,减少运行 chkdsk 所需的时间量。
    /l[:size]
    仅随 NTFS 使用。将日志文件的大小更改为由用户输入的大小。如果省略该参数,则 /l 会显示当前日志文件的大小。
    /?
    在命令提示符显示帮助。
    注释
    运行 chkdsk
    要在固定磁盘上运行 chkdsk 命令,您必须是该 Administrators 组的成员。

    重新启动时检查锁定的驱动器
    如果希望 chkdsk 修复磁盘错误,则此前不能打开该驱动器上的文件。如果有文件打开,会显示下述错误消息:

    Chkdsk cannot run because the volume is in use by another processWould you like to schedule this volume to be checked the next time the system restarts?(Y/N)

    如果选择下次重新启动计算机时检查该驱动器,则重新启动计算机后 chkdsk 会自动检查该驱动器并修复错误。如果该驱动器分区为启动分区,则 chkdsk 在检查完该驱动器后会自动重新启动计算机。

    报告排檀砦?
    chkdsk 命令会检查磁盘空间和文件分配表 (FAT)以及 NTFS 文件系统的使用情况。Chkdsk 在状态报告中提供特定于每个文件系统的信息。状态报告显示文件系统中找到的错误。在活动分区上运行 chkdsk 时,如果未含 /f 命令行选项,则它可能会因为无法锁定该驱动器而报告虚假信息。应该不定期使用 chkdsk 检查每个磁盘上的错误。

    修复磁盘错误
    只有指定 /f 命令行选项,chkdsk 命令才修复磁盘错误。Chkdsk 必须可以锁定驱动器以纠正错误。由于修复通常会更改磁盘的文件分配表,有时还会丢失数据,所以 chkdsk 会首先发送如下所示的确认消息:

    10 lost allocation units found in 3 chains.

    Convert lost chains to files?

    如果按 Y,Windows 会在根目录中将所有丢失链保存在一个名为 Filennnn.chk 的文件中。chkdsk 结束后,可以查看这些文件是否包含了所需的数据。如果按 N,Windows 会修复磁盘,但对于丢失的分配单元,它不保存其内容。

    如果不使用 /f 命令行选项,则在有文件需要修复时,chkdsk 会发送消息,但它不修复任何错误。

    如果在大磁盘(例如,70 GB)或有大量文件(数百万)的磁盘上使用 chkdsk /f,这可能要花很长时间(比如说,数天)才能完成。因为 chkdsk 直到工作完成它才会交出控制权,所以计算机在这段时间内将不可用。

    检查 FAT 磁盘
    Windows 以下列格式显示 FAT 磁盘的 chkdsk 状态报告:


    检查 NTFS 磁盘
    Windows 以下列格式显示 NTFS 磁盘的 chkdsk 状态报告:


    存在打开文件的情况下使用 chkdsk
    如果该驱动器上有打开的文件,则指定 /f 命令行选项后,chkdsk 会发送错误消息。如果未指定 /f 命令行选项并且存在打开的文件,则 chkdsk 会报告磁盘上丢失的分配单元。如果打开的文件没有记录在文件分配表时,可能会发生这种情况。如果 chkdsk 报告大量分配单元丢失,可以考虑修复该磁盘。

    查找物理磁盘错误
    使用 /r 命令行选项可查找文件系统中的物理磁盘错误。有关使用 recover 修复物理性损坏文件的信息,请参阅“”。

    报告磁盘坏扇区
    在磁盘第一次准备运行时,chkdsk 报告的坏扇区标记为损坏。它们不会造成危险。

    了解退出码
    下表列出了 chkdsk 完成任务后报告的退出码。

    退出码 说明
    0 没有发现错误。
    1 错误已找到并修复。
    2 已执行清理磁盘(例如碎片收集),或者因为没有指定 /f 而未执行清理磁盘。
    3 由于未指定 /f 选项,无法检查磁盘,错误不能修复或错误未修复。

    故障恢复控制台提供了带有不同参数的 chkdsk 命令。
    范例
    如果要检查驱动器 D 中的磁盘,并且希望 Windows 修复错误,请键入:

    chkdsk d:/f

    如果遇到错误,chkdsk 会暂停并显示消息。Chkdsk 完成任务时会显示列有磁盘状态的报告。除非 chkdsk 已完成任务,否则无法打开指定驱动器上的任何文件。

    在 FAT 磁盘上,要检查当前目录中所有文件的不相邻块,请键入:

    chkdsk *.*

    Chkdsk 显示状态报告,然后列出符合具有不相邻块条件的文件。

数据统计

  • 访问量: 6361
  • 日志数: 7
  • 书签数: 1
  • 建立时间: 2008-03-24
  • 更新时间: 2008-11-27

RSS订阅

Open Toolbar