PostgreSQL 8_4 在中文 windows 下安装错误

Posted on

PostgreSQL 8_4 在中文 windows 下安装错误

goldenhawking的专栏

#

*

用户操作[留言] [发消息] [加为好友] 订阅我的博客XML聚合 FeedSky订阅到鲜果订阅到Google订阅到抓虾goldenhawking的公告文章分类存档* 2009年08月(3)

这个错误是在安装新版的PostgreSQL 8.4时遇到的,安装程序在 windows xp sp3下启动(简体中文),一路Next, 没注意“locale”选项,当时选择了default,next, 导致无法安装完成,提示:

Installation fails with complaint about accessing data\postgresql.conf 发现这个老兄也遇到了:

http://www.nabble.com/BUG--4785%3A-Installation-fails-to23323059.html/#a23323059

搞半天,最后发现了问题,是PSQL的全文搜索中没有简体中文支持。其实,安装的时候选择"C"就可以了。

哎,看来我和开源数据库最近老扯不清关系。

这是在nabble上的帖子。 En, I have that damm problem sloved. Are you using a Non-English Version of Windows? for example, JPN, CHS? If you install your PSQL in an Asian-language windows, be sure that "locale" settings should be setted manualy to a supported language, I choosed "C" for it is the first item in the combo. this is the errmsg when you're using default local settings: Running the post-installation/upgrade actions: Delete the temporary scripts directory... Write the base directory to the ini file... Write the version number to the ini file... Initialising the database cluster (this may take a few minutes)... Executing cscript Script exit code: 0 Script output: Ensuring we can write to the data directory (using cacls): 数据无效。(Means data is unavaliable) The files belonging to this database system will be owned by user "XXXXXXXX". This user must also own the server process. The database cluster will be initialized with locale Chinese_XXXXXXX.936. initdb: could not find suitable text search configuration for locale Chinese_XXXXXXX.936 The default text search configuration will be set to "simple". fixing permissions on existing directory D:/XXXXXX... ok creating subdirectories ... ok selecting default max_connections ... 100 selecting default shared_buffers ... 32MB creating configuration files ... ok creating template1 database in D:/XXXXXXX/base/1 ... ok initializing pg_authid ... FATAL: database locale is incompatible with operating system DETAIL: The database was initialized with LC_COLLATE "Chinese_XXXXXXXX.936", which is not recognized by setlocale(). HINT: Recreate the database with another locale or install the missing locale. child process exited with exit code 1 initdb: removing contents of data directory "D:/XXXXXX" Granting service account access to the data directory (using cacls): 处理的目录: D:\XXXXXXXXX(Processed folder:D:\XXXXXXXXX) initcluster.vbs ran to completion Script stderr: Configuring database server startup... Executing cscript Script exit code: 0 Script output: startupcfg.vbs ran to completion Script stderr:

发表于 @ 2009年08月05日 12:44:00 | 评论( loading... )| 编辑| 举报| 收藏

旧一篇:初试My-SQL

Copyright © goldenhawkingPowered by CSDN Blog

mysql命令集锦[绝对精华]

Posted on

mysql命令集锦[绝对精华]

首页 新闻 论坛 博客 招聘 更多 ▼

问答 知识库 圈子 搜索

您还未登录 ! 我的应用 登录 注册

加俊

永久域名 http://jiajun.javaeye.com/

40顶

0踩

“懒惰” Linux 管理员的 10 个关键技巧 | 我的googleAdSense和阿里妈妈

2009-06-18

mysql命令集锦[绝对精华]

关键字: mysql命令集锦 整理By:leo,感谢leo

测试环境:mysql 5.0.45 【注:可以在mysql中通过mysql> SELECT VERSION();来查看数据库版本】

一、连接MYSQL。

格式: mysql -h主机地址 -u用户名 -p用户密码

1、连接到本机上的MYSQL。

首先打开DOS窗口,然后进入目录mysql\bin,再键入命令mysql -u root -p,回车后提示你输密码.注意用户名前可以有空格也可以没有空格,但是密码前必须没有空格,否则让你重新输入密码.

如果刚安装好MYSQL,超级用户root是没有密码的,故直接回车即可进入到MYSQL中了,MYSQL的提示符是: mysql>

2、连接到远程主机上的MYSQL。假设远程主机的IP为:110.110.110.110,用户名为root,密码为abcd123。则键入以下命令:

mysql -h110.110.110.110 -u root -p 123;(注:u与root之间可以不用加空格,其它也一样)

3、退出MYSQL命令: exit (回车)

二、修改密码。

格式:mysqladmin -u用户名 -p旧密码 password 新密码

1、给root加个密码ab12。首先在DOS下进入目录mysql\bin,然后键入以下命令

mysqladmin -u root -password ab12

注:因为开始时root没有密码,所以-p旧密码一项就可以省略了。 2、再将root的密码改为djg345。

mysqladmin -u root -p ab12 password djg345

三、增加新用户。 (注意:和上面不同,下面的因为是MYSQL环境中的命令,所以后面都带一个分号作为命令结束符)

格式:grant select on 数据库./* to 用户名@登录主机 identified by “密码”

1、增加一个用户test1密码为abc,让他可以在任何主机上登录,并对所有数据库有查询、插入、修改、删除的权限。首先用root用户连入MYSQL,然后键入以下命令:

grant select,insert,update,delete on /./ to test1@”%” Identified by “abc”;

但增加的用户是十分危险的,你想如某个人知道test1的密码,那么他就可以在internet上的任何一台电脑上登录你的mysql数据库并对你的数据可以为所欲为了,解决办法见2。

2、增加一个用户test2密码为abc,让他只可以在localhost上登录,并可以对数据库mydb进行查询、插入、修改、删除的操作(localhost指本地主机,即MYSQL数据库所在的那台主机),

这样用户即使用知道test2的密码,他也无法从internet上直接访问数据库,只能通过MYSQL主机上的web页来访问了。

grant select,insert,update,delete on mydb./* to test2@localhost identified by “abc”;

如果你不想test2有密码,可以再打一个命令将密码消掉。

grant select,insert,update,delete on mydb./* to test2@localhost identified by “”;

下篇我是MYSQL中有关数据库方面的操作。注意:你必须首先登录到MYSQL中,以下操作都是在MYSQL的提示符下进行的,而且每个命令以分号结束。

一、操作技巧

1、如果你打命令时,回车后发现忘记加分号,你无须重打一遍命令,只要打个分号回车就可以了。

也就是说你可以把一个完整的命令分成几行来打,完后用分号作结束标志就OK。

2、你可以使用光标上下键调出以前的命令。

二、显示命令

1、显示当前数据库服务器中的数据库列表:

mysql> SHOW DATABASES;

注意:mysql库里面有MYSQL的系统信息,我们改密码和新增用户,实际上就是用这个库进行操作。

2、显示数据库中的数据表:

mysql> USE 库名; mysql> SHOW TABLES;

3、显示数据表的结构:

mysql> DESCRIBE 表名;

4、建立数据库:

mysql> CREATE DATABASE 库名;

5、建立数据表:

mysql> USE 库名; mysql> CREATE TABLE 表名 (字段名 VARCHAR(20), 字段名 CHAR(1));

6、删除数据库:

mysql> DROP DATABASE 库名;

7、删除数据表:

mysql> DROP TABLE 表名;

8、将表中记录清空:

mysql> DELETE FROM 表名;

9、显示表中的记录:

mysql> SELECT /* FROM 表名;

10、往表中插入记录:

mysql> INSERT INTO 表名 VALUES (”hyq”,”M”);

11、更新表中数据:

mysql-> UPDATE 表名 SET 字段名1=’a',字段名2=’b’ WHERE 字段名3=’c';

12、用文本方式将数据装入数据表中:

mysql> LOAD DATA LOCAL INFILE “D:/mysql.txt” INTO TABLE 表名;

13、导入.sql文件命令:

mysql> USE 数据库名; mysql> SOURCE d:/mysql.sql;

14、命令行修改root密码:

mysql> UPDATE mysql.user SET password=PASSWORD(’新密码’) WHERE User=’root’; mysql> FLUSH PRIVILEGES;

15、显示use的数据库名:

mysql> SELECT DATABASE();

16、显示当前的user:

mysql> SELECT USER();

三、一个建库和建表以及插入数据的实例

drop database if exists school; //如果存在SCHOOL则删除

create database school; //建立库SCHOOL

use school; //打开库SCHOOL

create table teacher //建立表TEACHER ( id int(3) auto_increment not null primary key, name char(10) not null, address varchar(50) default ‘深圳’, year date ); //建表结束

//以下为插入字段 insert into teacher values(”,’allen’,'大连一中’,'1976-10-10′); insert into teacher values(”,’jack’,'大连二中’,'1975-12-23′);

如果你在mysql提示符键入上面的命令也可以,但不方便调试。

(1)你可以将以上命令原样写入一个文本文件中,假设为school.sql,然后复制到c:\下,并在DOS状态进入目录\mysql\bin,然后键入以下命令:

mysql -uroot -p密码 < c:\school.sql

如果成功,空出一行无任何显示;如有错误,会有提示。(以上命令已经调试,你只要将//的注释去掉即可使用)。

(2)或者进入命令行后使用 mysql> source c:\school.sql; 也可以将school.sql文件导入数据库中。

四、将文本数据转到数据库中

1、文本数据应符合的格式:字段数据之间用tab键隔开,null值用\n来代替.例:

3 rose 大连二中 1976-10-10

4 mike 大连一中 1975-12-23

假设你把这两组数据存为school.txt文件,放在c盘根目录下。

2、数据传入命令 load data local infile “c:\school.txt” into table 表名;

注意:你最好将文件复制到\mysql\bin目录下,并且要先用use命令打表所在的库。

五、备份数据库:(命令在DOS的\mysql\bin目录下执行)

1.导出整个数据库

导出文件默认是存在mysql\bin目录下

mysqldump -u 用户名 -p 数据库名 > 导出的文件名

mysqldump -u user_name -p123456 database_name > outfile_name.sql

2.导出一个表

mysqldump -u 用户名 -p 数据库名 表名> 导出的文件名

mysqldump -u user_name -p database_name table_name > outfile_name.sql

3.导出一个数据库结构

mysqldump -u user_name -p -d –add-drop-table database_name > outfile_name.sql

-d 没有数据 –add-drop-table 在每个create语句之前增加一个drop table

4.带语言参数导出

mysqldump -uroot -p –default-character-set=latin1 –set-charset=gbk –skip-opt database_name > outfile_name.sql

400

评论

8 楼 jordan421 2009-06-26 引用

学习了~ 7 楼 lseeo 2009-06-23 引用

thanks!

6 楼 MyDicta 2009-06-22 引用

嗯 ~~ 楼主辛苦了。。。 讲的很浅了, 不对我相信这与文章篇幅有关, 呵呵~~ 不过文章对于初学者到是一个不错的学习机会,收藏了,防止以后忘记。。。 lz的SQL约束不规范哦,没涉及到储存过程,触发器,索引,高级查询。。。。。这方面的内容 5 楼 flyfan 2009-06-20 引用

谢谢分享,好东西,收藏之

4 楼 sirxenofex 2009-06-20 引用

grant select,insert,update,delete on /./ to test1@”%” Identified by “abc”; 这一句在我经验好像是达不到预期效果的。MySQL默认有个空用户名的账户,并且在本级与在任意地址,都是没有任何权限的。好像必须删除这条记录,才可以实现@"%"的权限 3 楼 lucky16 2009-06-20 引用

确实很详细哦普1!! 呵呵 代表新手感谢你啊!

2 楼 rongxh7 2009-06-19 引用

辛苦了,写得很详细的. 1 楼 whaosoft 2009-06-19 引用

lz辛苦了

发表评论

您还没有登录,请登录后发表评论(快捷键 Alt+S / Ctrl+Enter)

iammonster的博客

iammonster

何去何从 2009-09-03 通过网页

>>更多闲聊

搜索本博客

最近访客 >>更多访客

neilzwb的博客

neilzwb

jacki6的博客

jacki6 天才狐狸的博客

天才狐狸

rfv1116的博客

rfv1116

博客分类

其他分类

链接

最新评论

MySQL 忘记root密码,解决办法

Posted on

MySQL 忘记root密码,解决办法

首页 资讯 精华 论坛 问答 博客 专栏 群组 更多 ▼

招聘 搜索

您还未登录 ! 登录 注册

Snowolf的意境空间!

MySQL 忘记root密码,解决办法 **

博客分类:

今天遇到个破问题:用了N久的MySQL要新建数据库,竟然忘记了密码。 而这个问题居然也很常见! 要修改MySQL的root密码,有两个先决条件:

  • 有修改MySQL配置文件的权限
  • 有重启MySQL服务的权限 先修改配置文件: 引用

/# vim /etc/my.cnf [mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock user=mysql /# Default to using old password format for compatibility with mysql 3.x /# clients (those using the mysqlclient10 compatibility package). old_passwords=1 /# Disabling symbolic-links is recommended to prevent assorted security risks; /# to do so, uncomment this line: /# symbolic-links=0 [mysqld_safe] log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid 在[mysqld]下增加skip-grant-tables,即跳过权限验证。 然后登录MySQL,修改root密码: 引用

/# mysql Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 3 Server version: 5.0.95 Source distribution Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> use mysql; Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Database changed mysql> update user SET Password = password('') where user='root'; Query OK, 3 rows affected (0.00 sec) Rows matched: 3 Changed: 3 Warnings: 0 mysql> flush privileges ; Query OK, 0 rows affected (0.00 sec) mysql> quit Bye 然后把刚才修改的配置文件再改回来,最后重启服务: 引用

/# service mysqld restart 停止 MySQL: [确定] 启动 MySQL: [确定] 大功告成! PS:更果断的办法: 引用

关闭mysqld 命令行执行 mysqld --skip-grant-tables & 无密码登陆! 突然了解了,黑客入侵,就这么简单。。。。 5

4

分享到:

Eclipse+Maven快速生成Web项目,解决部署 ... | Linux环境小问题——Get HostName Error

评论

4 楼 snowolf 2012-08-09

dwangel 写道

先关掉mysqld 然后,直接命令行执行 mysqld --skip-grant-tables &就可以了。 不用改配置。 改配置要改过去,还要改回来。 这个果断!!! 3 楼 dwangel 2012-08-09

先关掉mysqld 然后,直接命令行执行 mysqld --skip-grant-tables &就可以了。 不用改配置。 改配置要改过去,还要改回来。

2 楼 jinnianshilongnian 2012-08-09

,哈哈哈 我转载了啊 1 楼 smiky 2012-08-09

其实最简单的办法是找一个安装好了的mysql,其对应安装目录下的系统数据库内的文件全部copy到有问题的mysql下就OK了

发表评论

您还没有登录,请您登录后再发表评论

snowolf的博客

snowolf

  • 浏览: 902575 次
  • 性别: Icon_minigender_1
  • 来自: 北京
  • 最近访客 更多访客>>

D_e_人的博客

De

华个子的博客

华个子 torry_he的博客

torry_he

cxzucc的博客

cxzucc

文章分类

存档分类

最新评论

MySQL数据库备份的10个教程(10 Tutorials To Take MySQL Databa

Posted on

MySQL数据库备份的10个教程(10 Tutorials To Take MySQL Database Backup)

译文如下:

MySQL 是用于交互式网站开发的最为知名的开源数据库系统。如果你使用的 MySQL 数据库,你应当经常有规律地备份数据,以防数据丢失(译注:不管用什么类型的数据都得定期备份)。这里有10个自动或手动备份 MySQL 数据库的方法,应该有适合你的方法。

1. Backing Up Using MySQLDump

**数据备份,可以使用 MySQL 自带的 MySQLDump 命令来完成。这篇文章给出了多种例子,包括把数据库备份成一个文件,备份到另外一个服务器,还有备份成一个gzip压缩文件。

2. MySQL Export: How to Backup Your MySQL Database?

录数据库,可以通过生成一个 dump 文件来备份数据库。这种方法的前提是,服务器上必须有 phpMyAdmin 工具。

3. Automatically Backup Mysql Database to Amazon S3

也可以使用Amazon S3云存储服务来备份数据库。这篇文章中有一个自动脚本,它可以自动备份数据库,并转移至Amazon S3系统。

4. How to Backup MySQL Databases, Web Server Files to an FTP Server Automatically

如果你有自己的Web服务器或VPS,这里有一个简单方法:使用 FTP 或 NAS备份。首先你需要用 mysqldump 命令备份每个单独数据库,然后写一个脚本,用于 tar 打包,设置 cron ,并创建 FTP 备份。

MySQL数据库备份的10个教程

5. How to E-Mail Yourself an Automatic Backup of Your MySQL Database Table with PHP

这个方法可以帮助你轻松备份特定的数据表,给你发送一封附有. sql 文件的邮件。 你可以创建一个特殊的邮箱l账号来接收备份文件。

6. How to Backup MySQL Database Using PHP

至少分三步:① 在 PHP 文件中执行数据库备份语句;② 在 system()函数中执行 mysqldump 命令;③ 用 phpMyAdmin 做备份

7. Backup Your Database Into an XML File By Using PHP

这个方法使用一段PHP代码片段,以XML格式输出备数据库。虽然 XML 文件不是还原数据表的最便捷格式,但便于读取。

8. Backup MySQL Database Through SSH

没有 phpMyAdmin 工具也可以备份数据库,SSH可用于备份较大的数据。必须在 cPanel 或 Plesk 控制面板中开启 shell 访问权,然后使用一个诸如 PuTTY 之类的工具远程登录服务器。

9. How to Backup MySQL Database Automatically (For Linux Users)

如果你是 Linux 用户,你可以用 cron 自动备份 MySQL 数据库。cron 是 Unix/Linux 系统下的一个定时执行工具。

10. Ubuntu Linux Backup MySQL Server Shell Script

如果你的VPS 操作系统是 Ubuntu 系统,那你可以把整个MySQL服务器数据库备份到FTP服务器中。 来源: [http://blog.jobbole.com/14012/](http://blog.jobbole.com/14012/) 原文:

MySQL is the most famous open source database management system for the development of interactive Websites. If you use MySQL Databases in your websites then you should always make backup of your data regularly to recover it in case of loss.

Here are 10 methods to automatically or manually backup MySQL databases. Check them out and pick the one which is best suited to you. Backing Up MySQL Database

Advertisement

1. Backing Up Using MySQLDump Backup of data can be made using mysqldump utility that comes with MySQL. Various examples are given using mysqldump, including the backing up your database to a file, another server, and even a compressed gzip file.

2. MySQL Export: How to Backup Your MySQL Database?

You can backup by making a dump file (export / backup) of a database used by your account. To do so you have to head over to phpMyAdmin tool in your cPanel.

3. Automatically Backup Mysql Database to Amazon S3

You can also use Amazon S3 to backup your mysql databases. An automated script is present here, which takes backup of a mysql database and then moves it to Amazon S3.

4. How to Backup MySQL Databases, Web Server Files to an FTP Server Automatically

It is an easy way to backup data for users who run their own web server and MySQL server on a dedicated box or VPS. The best thing when using FTP or NAS backup is the fact that your data is secure. First of all you have to backup every single database with mysqldump command, Automating tasks of backup with tar, Setup a cron job and create FTP backup script.

5. How to E-Mail Yourself an Automatic Backup of Your MySQL Database Table with PHP

It will deliver an e-mail to you with an .sql file attached, which lets you to back up particular tables easily. You can even create an e-mail account specifically to get these backup.

6. How to Backup MySQL Database Using PHP

Carry out a database backup query from PHP file. In order to restore the backup all you have to do is to run LOAD DATA INFILE query.

7. Backup Your Database Into an XML File By Using PHP

It will display a PHP snippet that outputs your database as XML. XML is not one of the easiest format to restore a table but it is definitely easier to read.

8. Backup MySQL Database Through SSH

SSH can be used to backup large MySQL data. You will have to enable shell access in your cPanel or Plesk control panel and utilize a tool like PuTTY to log into your server through SSH.

9. How to Backup MySQL Database Automatically (For Linux Users)

If you are a Linux user you can backup MySQL Database automatically by using cron. “cron” is a time-based scheduling utility in Unix/Linux OS.

10. Ubuntu Linux Backup MySQL Server Shell Script

You can backup all your MySQL server databases to your ftp server, if you have a dedicated VPS server with Ubuntu Linux.

You are welcome to share any more methods in comments below. 来源: [http://smashinghub.com/10-tutorials-to-take-mysql-database-backup.htm](http://smashinghub.com/10-tutorials-to-take-mysql-database-backup.htm)

ORACLE中日期和时间函数汇总 (2)

Posted on

ORACLE中日期和时间函数汇总 (2)

.Net 公告

统计

  • 随笔 - 88
  • 文章 - 3
  • 评论 - 10
  • 引用 - 0

导航

常用链接

随笔档案

新闻档案

相册

积分与排名

  • 积分 - 53936
  • 排名 - 1522

最新评论

阅读排行榜

评论排行榜

ORACLE中日期和时间函数汇总(转载)

在oracle中处理日期大全 TO_DATE格式
Day:
dd number 12
dy abbreviated fri
day spelled out friday
ddspth spelled out, ordinal twelfth
Month:
mm number 03
mon abbreviated mar
month spelled out march
Year:
yy two digits 98
yyyy four digits 1998
24小时格式下时间范围为: 0:00:00 - 23:59:59....
12小时格式下时间范围为: 1:00:00 - 12:59:59 ....

  1. 日期和字符转换函数用法(to_date,to_char)
  2. select to_char( to_date(222,'J'),'Jsp') from dual
    显示Two Hundred Twenty-Two
  3. 求某天是星期几
    select to_char(to_date('2002-08-26','yyyy-mm-dd'),'day') from dual;
    星期一
    select to_char(to_date('2002-08-26','yyyy-mm-dd'),'day','NLS_DATE_LANGUAGE = American') from dual;
    monday
    设置日期语言
    ALTER SESSION SET NLS_DATE_LANGUAGE='AMERICAN';
    也可以这样
    TO_DATE ('2002-08-26', 'YYYY-mm-dd', 'NLS_DATE_LANGUAGE = American')
  4. 两个日期间的天数
    select floor(sysdate - to_date('20020405','yyyymmdd')) from dual;
  5. 时间为null的用法
    select id, active_date from table1
    UNION
    select 1, TO_DATE(null) from dual;
    注意要用TO_DATE(null)
  6. a_date between to_date('20011201','yyyymmdd') and to_date('20011231','yyyymmdd')
    那么12月31号中午12点之后和12月1号的12点之前是不包含在这个范围之内的。
    所以,当时间需要精确的时候,觉得to_char还是必要的
  7. 日期格式冲突问题
    输入的格式要看你安装的ORACLE字符集的类型, 比如: US7ASCII, date格式的类型就是: '01-Jan-01'
    alter system set NLS_DATE_LANGUAGE = American
    alter session set NLS_DATE_LANGUAGE = American
    或者在to_date中写
    select to_char(to_date('2002-08-26','yyyy-mm-dd'),'day','NLS_DATE_LANGUAGE = American') from dual;
    注意我这只是举了NLS_DATE_LANGUAGE,当然还有很多,
    可查看
    select / from nls_session_parameters
    select /
    from V$NLS_PARAMETERS
  8. select count(/*)
    from ( select rownum-1 rnum
    from all_objects
    where rownum <= to_date('2002-02-28','yyyy-mm-dd') - to_date('2002-
    02-01','yyyy-mm-dd')+1
    )
    where to_char( to_date('2002-02-01','yyyy-mm-dd')+rnum-1, 'D' )
    not
    in ( '1', '7' )
    查找2002-02-28至2002-02-01间除星期一和七的天数
    在前后分别调用DBMS_UTILITY.GET_TIME, 让后将结果相减(得到的是1/100秒, 而不是毫秒).
  9. select months_between(to_date('01-31-1999','MM-DD-YYYY'),
    to_date('12-31-1998','MM-DD-YYYY')) "MONTHS" FROM DUAL;
    1
    select months_between(to_date('02-01-1999','MM-DD-YYYY'),
    to_date('12-31-1998','MM-DD-YYYY')) "MONTHS" FROM DUAL;
    1.03225806451613
  10. Next_day的用法
    Next_day(date, day)
    Monday-Sunday, for format code DAY
    Mon-Sun, for format code DY
    1-7, for format code D
    11
    select to_char(sysdate,'hh:mi:ss') TIME from all_objects
    注意:第一条记录的TIME 与最后一行是一样的
    可以建立一个函数来处理这个问题
    create or replace function sys_date return date is
    begin
    return sysdate;
    end;
    select to_char(sys_date,'hh:mi:ss') from all_objects;
  11. 获得小时数
    SELECT EXTRACT(HOUR FROM TIMESTAMP '2001-02-16 2:38:40') from offer
    SQL> select sysdate ,to_char(sysdate,'hh') from dual;
    SYSDATE TO_CHAR(SYSDATE,'HH')

2003-10-13 19:35:21 07
SQL> select sysdate ,to_char(sysdate,'hh24') from dual;
SYSDATE TO_CHAR(SYSDATE,'HH24')


2003-10-13 19:35:21 19
获取年月日与此类似

  1. 年月日的处理
    select older_date,
    newer_date,
    years,
    months,
    abs(
    trunc(
    newer_date-
    add_months( older_date,years/*12+months )
    )
    ) days
    from ( select
    trunc(months_between( newer_date, older_date )/12) YEARS,
    mod(trunc(months_between( newer_date, older_date )),
    12 ) MONTHS,
    newer_date,
    older_date
    from ( select hiredate older_date,
    add_months(hiredate,rownum)+rownum newer_date
    from emp )
    )
  2. 处理月份天数不定的办法
    select to_char(add_months(last_day(sysdate) +1, -2), 'yyyymmdd'),last_day(sysdate) from dual
  3. 找出今年的天数
    select add_months(trunc(sysdate,'year'), 12) - trunc(sysdate,'year') from dual
    闰年的处理方法
    to_char( last_day( to_date('02' || :year,'mmyyyy') ), 'dd' )
    如果是28就不是闰年
  4. yyyy与rrrr的区别
    'YYYY99 TO_C

yyyy 99 0099
rrrr 99 1999
yyyy 01 0001
rrrr 01 2001
18.不同时区的处理
select to_char( NEW_TIME( sysdate, 'GMT','EST'), 'dd/mm/yyyy hh:mi:ss') ,sysdate
from dual;

  1. 5秒钟一个间隔
    Select TO_DATE(FLOOR(TO_CHAR(sysdate,'SSSSS')/300) /* 300,'SSSSS') ,TO_CHAR(sysdate,'SSSSS')
    from dual
    2002-11-1 9:55:00 35786
    SSSSS表示5位秒数
  2. 一年的第几天
    select TO_CHAR(SYSDATE,'DDD'),sysdate from dual
    310 2002-11-6 10:03:51
    21.计算小时,分,秒,毫秒
    select
    Days,
    A,
    TRUNC(A/24) Hours,
    TRUNC(A/
    24/60 - 60/TRUNC(A/24)) Minutes,
    TRUNC(A/
    24/60/60 - 60/TRUNC(A/24/60)) Seconds,
    TRUNC(A/
    24/60/60/100 - 100/TRUNC(A/24/60/60)) mSeconds
    from
    (
    select
    trunc(sysdate) Days,
    sysdate - trunc(sysdate) A
    from dual
    )
    select /
    from tabname
    order by decode(mode,'FIFO',1,-1)/*to_char(rq,'yyyymmddhh24miss');
    //
    floor((date2-date1) /365) 作为年
    floor((date2-date1, 365) /30) 作为月
    mod(mod(date2-date1, 365), 30)作为日.
    23.next_day函数
    next_day(sysdate,6)是从当前开始下一个星期五。后面的数字是从星期日开始算起。
    1 2 3 4 5 6 7
    日 一 二 三 四 五 六

oracle中有很多关于日期的函数 在oracle中有很多关于日期的函数,如: 1、add_months()用于从一个日期值增加或减少一些月份 date_value:=add_months(date_value,number_of_months) 例: SQL> select add_months(sysdate,12) "Next Year" from dual;

Next Year

13-11月-04 SQL> select add_months(sysdate,112) "Last Year" from dual;

Last Year

13-3月 -13 SQL> 2、current_date()返回当前会放时区中的当前日期 date_value:=current_date SQL> column sessiontimezone for a15 SQL> select sessiontimezone,current_date from dual; SESSIONTIMEZONE CURRENT_DA


+08:00 13-11月-03 SQL> alter session set time_zone='-11:00' 2 / 会话已更改。 SQL> select sessiontimezone,current_timestamp from dual; SESSIONTIMEZONE CURRENT_TIMESTAMP


-11:00 12-11月-03 04.59.13.668000 下午 -11: 00 SQL> 3、current_timestamp()以timestamp with time zone数据类型返回当前会放时区中的当前日期 timestamp_with_time_zone_value:=current_timestamp([timestamp_precision]) SQL> column sessiontimezone for a15 SQL> column current_timestamp format a36 SQL> select sessiontimezone,current_timestamp from dual; SESSIONTIMEZONE CURRENT_TIMESTAMP


+08:00 13-11月-03 11.56.28.160000 上午 +08: 00 SQL> alter session set time_zone='-11:00' 2 / 会话已更改。 SQL> select sessiontimezone,current_timestamp from dual; SESSIONTIMEZONE CURRENT_TIMESTAMP


-11:00 12-11月-03 04.58.00.243000 下午 -11: 00 SQL> 4、dbtimezone()返回时区 varchar_value:=dbtimezone SQL> select dbtimezone from dual;

DBTIME

-07:00 SQL> 5、extract()找出日期或间隔值的字段值 date_value:=extract(date_field from [datetime_value|interval_value]) SQL> select extract(month from sysdate) "This Month" from dual;

This Month

    11

SQL> select extract(year from add_months(sysdate,36)) "3 Years Out" from dual;

3 Years Out

   2006

SQL> 6、last_day()返回包含了日期参数的月份的最后一天的日期 date_value:=last_day(date_value) SQL> select last_day(date'2000-02-01') "Leap Yr?" from dual;

Leap Yr?

29-2月 -00 SQL> select last_day(sysdate) "Last day of this month" from dual;

Last day o

30-11月-03 SQL> 7、localtimestamp()返回会话中的日期和时间 timestamp_value:=localtimestamp SQL> column localtimestamp format a28 SQL> select localtimestamp from dual;

LOCALTIMESTAMP

13-11月-03 12.09.15.433000 下午 SQL> select localtimestamp,current_timestamp from dual; LOCALTIMESTAMP CURRENT_TIMESTAMP


13-11月-03 12.09.31.006000 13-11月-03 12.09.31.006000 下午 +08: 下午 00 SQL> alter session set time_zone='-11:00'; 会话已更改。 SQL> select localtimestamp,to_char(sysdate,'DD-MM-YYYY HH:MI:SS AM') "SYSDATE" from dual; LOCALTIMESTAMP SYSDATE


12-11月-03 05.11.31.259000 13-11-2003 12:11:31 下午 下午 SQL> 8、months_between()判断两个日期之间的月份数量 number_value:=months_between(date_value,date_value) SQL> select months_between(sysdate,date'1971-05-18') from dual;

MONTHS_BETWEEN(SYSDATE,DATE'1971-05-18')

                          389.855143

SQL> select months_between(sysdate,date'2001-01-01') from dual;

MONTHS_BETWEEN(SYSDATE,DATE'2001-01-01')

                          34.4035409

SQL> 9、next_day()给定一个日期值,返回由第二个参数指出的日子第一次出现在的日期值(应返回相应日子的名称字符串)

與周相關日期函數 1.查询某周的第一天 select trunc(decode(ww, 53, to_date(yy || '3112', 'yyyyddmm'), to_date(yy || '-' || to_char(ww / 7), 'yyyy-ddd')), 'd') last_day from (select substr('2004-32', 1, 4) yy, to_number(substr('2004-32', 6)) ww from dual) select trunc(to_date(substr('2003-01',1,5)||to_char((to_number(substr('2003-01',6)))/7),'yyyy-ddd'),'d')-6 first_day from dual select min(v_date) from (select (to_date('200201','yyyymm') + rownum) v_date from all_tables where rownum < 370) where to_char(v_date,'yyyy-iw') = '2002-49' 2.查询某周的最后一天 select trunc(decode(ww, 53, to_date(yy || '3112', 'yyyyddmm'), to_date(yy || '-' || to_char(ww /* 7), 'yyyy-ddd')), 'd') - 6 first_day from (select substr('2004-33', 1, 4) yy, to_number(substr('2004-33', 6)) ww from dual)

select trunc(to_date(substr('2003-01',1,5)||to_char((to_number(substr('2003-01',6)))/*7),'yyyy-ddd'),'d') last_day from dual select max(v_date) from (select (to_date('200408','yyyymm') + rownum) v_date from all_tables where rownum < 370) where to_char(v_date,'yyyy-iw') = '2004-33' 3.查询某周的日期 select min_date, to_char(min_date,'day') day from (select to_date(substr('2004-33',1,4)||'001'+rownum-1,'yyyyddd') min_date from all_tables where rownum <= decode(mod(to_number(substr('2004-33',1,4)),4),0,366,365)
union select to_date(substr('2004-33',1,4)-1|| decode(mod(to_number(substr('2004-33',1,4))-1,4),0,359,358)+rownum,'yyyyddd') min_date from all_tables
where rownum <= 7 union select to_date(substr('2004-33',1,4)+1||'001'+rownum-1,'yyyyddd') min_date from all_tables
where rownum <= 7
) where to_char(min_date,'yyyy-iw') ='2004-33'

oracle中时间运算 论坛中常常看到有对oracle中时间运算提问的问题,今天有时间,看了看以前各位兄弟的贴子,整理了一下,并作了个示例,希望会对大家有帮助。 首先感谢ern、eric.li及各版主还有热心的兄弟们 内容如下: 1、oracle支持对日期进行运算 2、日期运算时是以天为单位进行的 3、当需要以分秒等更小的单位算值时,按时间进制进行转换即可 4、进行时间进制转换时注意加括号(见示例中红色括号),否则会出问题 SQL> alter session set nls_date_format='yyyy-mm-dd hh:mi:ss'; 会话已更改。 SQL> set serverout on SQL> declare 2 DateValue date; 3 begin 4 select sysdate into DateValue from dual; 5 dbms_output.put_line('源时间:'||to_char(DateValue)); 6 dbms_output.put_line('源时间减1天:'||to_char(DateValue-1)); 7 dbms_output.put_line('源时间减1天1小时:'||to_char(DateValue-1-1/24)); 8 dbms_output.put_line('源时间减1天1小时1分:'||to_char(DateValue-1-1/24-1/(24/60))); 9 dbms_output.put_line('源时间减1天1小时1分1秒:'||to_char(DateValue-1-1/24-1/(24/60)-1/(24/60/6 0))); 10 end; 11 / 源时间:2003-12-29 11:53:41 源时间减1天:2003-12-28 11:53:41 源时间减1天1小时:2003-12-28 10:53:41 源时间减1天1小时1分:2003-12-28 10:52:41 源时间减1天1小时1分1秒:2003-12-28 10:52:40 PL/SQL 过程已成功完成。 东方新秀 关注 - 0 粉丝 - 0

关注博主

0

0 0

(请您对文章做出评价)

«上一篇:Ubuntu实践之一 »下一篇:使用.NET开发Web应用程序时,数据库访问类定义 posted on 2007-04-15 12:09 东方新秀 阅读(14275) 评论(0) 编辑 收藏

注册用户登录后才能发表评论,请 登录注册

返回博客园首页

有道难题开锣头奖8万! IT新闻: · .中国域名艰难国际化背后:3千专家曾无一支持 · 科技公司游说费用一览 苹果花费最少 · 谷歌本周I/O大会推云存储服务Google Storage 挑战亚马逊S3 · Opera+各国国旗:粉丝制作图标秀 · 微软起诉Salesforce 称侵犯其9项专利权 每天10分钟,轻松学英语 沪江网校

推荐职位:

网站导航: 博客园首页 IT新闻 个人主页 闪存 程序员招聘 社区 博问 China-pub 计算机图书网上专卖店!6.5万品种2-8折! China-Pub 计算机绝版图书按需印刷服务

在知识库中查看: ORACLE中日期和时间函数汇总(转载) Copyright © 东方新秀 Powered by: 博客园 模板提供:沪江博客