SQL Server,MySQL,Oracle,PostgreSQL中常用函数用法

       练习使用Hibernate没有用MySQL数据库,而是用了前不久接触的PostgreSQL,由于不同的数据对于相同的操作有各自的函数,MySQL的date_format(),在PostgreSQL中是没有的,google一番发现原来是要用to_char()。

        搜索到一篇英文文章《Executing Common  SQL Coding Tasks Using Function Calls》(常用SQL函数调用的区别),其中列出了如:MS SQL Server、MySQL、Oracle、PostgreSQL,这几个常用数据库中的常用函数。

        边翻译加自己的补充,分成几个文章共享给大家。方便以后的使用。

日期操作

 

1. 获取当前日期和时间

  • SQL Server

getdate()函数   (返回当前的日期和时间)

[sql] view plaincopy
 
  1. <span style="font-size:14px;">SELECT GETDATE()  
  2. GO</span>  

 

  •  MySQL

curdate()函数(返回当前的日期)

now()函数 (返回当前的日期和时间)

[sql] view plaincopy
 
  1. <span style="font-size:14px;">SELECT CURDATE()  
  2.   
  3. </span>  
  • Oracle

sysdate (返回服务器时间)

[sql] view plaincopy
 
  1. <span style="font-size:14px;">SELECT SYSDATE   
  2. FROM dual;  
  3. </span>  
  • PostgreSQL

current_date (返回当天的日期)

current_timestamp  (返回日期和时间)

now()  (返回当前的日期和时间,等效于 current_timestamp)

[sql] view plaincopy
 
  1. <span style="font-size:14px;">SELECT CURRENT_DATE;  
  2. </span>  

 

【注意】

 

  1. 以上的函数都是不需要参数的。
  2. Oraclecurrent_datesysdate都是现实当前时间,结果基本相同,但是也有区别:
      a.  urrent_date返回的是当前会话时间,sysdate返回的是服务器时间。
     b. current_date有时候比sysdate快一秒,这可能是四舍五入的结果。
     c. 如果修改当前会话的时区,比如将中国的时区为东八区,修改为东九区,则current_date显示的时间为东九区时间,根据东加西减的原则,current_date应该比sysdate快一小时.

 

2. 操作时间的获取子域。比如:年、月、日、小时等等。

  • SQL Server:datepart(datepart,date)
[sql] view plaincopy
 
  1. SELECT DATEPART(dw, GETDATE())  
  2. GO  

*  datepart()函数可以方便的取到日期中的各个部分,如日期:2012-12-05 151536.513
 

 

yy 取年:2012
mm 取月:12
dd 取月中的天:5
dy 取年中的天:340
wk 取年中的周:50
dw 取周中的天:4
qq 取年中的季度:4
hh 取小时:15
mi 取分钟:15
ss 取秒:36

 

 

  • MySQL:dayofmonth(date)返回对应的工作日名称
[sql] view plaincopy
 
  1. SELECT DAYNAME('1998-02-03');  
  2. ->'周四'  

 

  • Oracle:to_char(date,'格式')

 

 

[sql] view plaincopy
 
  1. SELECT TO_CHAR(SYSDATE, 'Day')   
  2. FROM dual;  

 

 

  • PostgreSQL:date_part(text,timestamp)

 

 

[sql] view plaincopy
 
  1. SELECT DATE_PART('dow'date 'now');  



 

3. 两个时间的间隔

  • SQLServer
[sql] view plaincopy
 
  1. SELECT DATADIFF(dd,'1/1/01',GETDATE())  
  2. GO  
  • MySQL
[sql] view plaincopy
 
  1. SELECT FROM_DAYS(TO_DAYS(CURDATE()) - TO_DAYS('2012-12-05'));  
  • Oracle
[sql] view plaincopy
 
  1. SELECT TO_DATE('25-Nov-2000','dd-mon-yyyy') - TO_DATE('25-Aug-1969','dd-mon-yyyy')  
  2. FROM dual;  
  • PostgreSQL

 

[sql] view plaincopy
 
  1. SELECT AGE(CURRENT_DATE,'25-Aug-1969');  

 

 

4. 日期格式化(Mon,DD,YYYY;mm/dd/yy;dd/mm/yy;等等)

  • SQL Server
[sql] view plaincopy
 
  1. SELECT CONVERT(VARCHAR(11),GETDATE(),102)  
  2. GO  
  • MySQL
[sql] view plaincopy
 
  1. SELECT DATE_FORMAT("2001-11-25","%M %E,%Y");  
  • Oracle
[sql] view plaincopy
 
  1. ELECT TO_CHAR(SYSDATE,'dd-Mon-yyyy hh:mi,ss PM')  
  2. FROM dual;  
  • PostgreSQL
[sql] view plaincopy
 
  1. SELECT TO_CHAR(timestamp(CURRENT_DATE),'dd-Mon-yyyy hh:mi:ss PM')  

posted on 2013-07-22 10:40  一个石头  阅读(575)  评论(0)    收藏  举报