sqlserver常用函式和oracle對比

2021-10-01 23:31:20 字數 3779 閱讀 7434

之所以寫這篇文章是因為我所做的專案是針對cs系統的bs版本(翻新)。cs系統是powerbuilder開發的,資料庫用的是sqlserevr,當我翻系統的時候我發現sqlserver和oracle的一些sql中的函式並不能通用,而且還存在很多的差別。所以現在就把這些發現的差別列舉出來。

計算日期間隔

--sqlserver

select datediff(

month

,cast(

'2019-01-01'

asdatetime

),cast(

'2019-01-31'

asdatetime))

--oracle方法一

select ceil(

(to_date(

'2019-11-01'

,'yyyy-mm-dd'

)-to_date(

'2020-01-31'

,'yyyy-mm-dd'))

/30)from dual

--oracle方法二

select to_char(to_date(

'2019-11-01'

,'yyyy-mm-dd'),

'mm'

)-to_char(to_date(

'2019-01-31'

,'yyyy-mm-dd'),

'mm'

)from dual

--oracle方法三

select ceil(months_between(to_date(

'2019-11-01'

,'yyyy-mm-dd'

),to_date(

'2020-01-31'

,'yyyy-mm-dd'))

)from dual

--需要注意的是,datediff中要得到正數結果,一般是用後面的月份減去前面

--推薦在oracle中使用第三種寫法,months_between是oracle中提供的日期函式

--不要使用第一種方式,做數**算,因為乙個月中不一定是30天。

日期加減

--sqlserver

select dateadd(

month,2

,getdate())

;--加2個月

select dateadd(

second,1

,getdate())

;--加1秒

--oracle

select add_months(sysdate,2)

from dual;

--加2個月

select sysdate,to_char(sysdate+1/

24/60/

60,'yyyy-mm-dd hh24:mi:ss'

)from dual;

--加1秒

通常用來將時間轉換為特定的格式字串

convert

(varchar(19

),getdate())

convert

(varchar(10

),getdate(),

110)

convert

(varchar(11

),getdate(),

106)

convert

(varchar(24

),getdate(),

113)

結果

dec

292008

11:45 pm12-

29-2008

29dec

0829

dec2008

16:25:46.635

使用oracle

to_char(sysdate,

'yyyy-mm-dd'

)to_date(

'2020-01-07'

,'yyyy-mm-dd'

)to_number(

'000012134'

)

專門介紹一下to_number

(1)to_number(varchar2 or

char

,'格式')

select to_number(

'000012134'

)from dual;

select to_number(

'88877'

)from dual;

(2)如果數字在格式範圍內的話,就是正確的,否則就是錯誤的;如:

select to_number(

'$12345.678'

,'$999999.99'

)from dual;

select to_number(

'$12345.678'

,'$999999.999'

)from dual;

(3)可以用來實現進製轉換;16進製制轉換為10進製:

select to_number(

'19f'

,'***'

)from dual;

select to_number(

'f',

'xx'

)from dual;

通常用來將字串轉換為時間

select cast(

date

as signed)

asdate

from table1;

select cast(

date

aschar)as

date

from table1;

select cast(

date

asdatetime)as

date

from table1;

select cast(

date

asdate)as

date

from table1;

select cast(

date

astime)as

date

from table1;

絕對值函式,這個函式是一樣的

select abs(-1

)from dual

取前幾條記錄

--sqlserver

select

top1 name from

table

--oracle

select name from

table

where rownum=

1order

bytime

desc

向上取整

--sqlserver

select ceiling(

-1.001

)--oracle

select ceil(

-1.001

)from dual

向下取整

--sqlserver

select floor(

-1.001

)value

--oracle

select floor(

-1.001

)value

from dual

未完待續

SQL Server和Oracle常用函式對比

數學函式 1.絕對值 s select abs 1 value o select abs 1 value from dual 2.取整 大 s select ceiling 1.001 value o select ceil 1.001 value from dual 3.取整 小 s select...

SQL SERVER常用函式

len 字串 返回這個字串中字元的長度。isnull check,return 空值函式。檢查check是否為null,如果為null則返回return的值。dateadd unit,duration,date 在向指定日期加上或減去一段時間,返回這個新的datetime值。unit單位 year,...

sqlserver常用函式

1.字串函式 長度與分析用 datalength char expr 返回字串包含字元數,但不包含後面的空格 substring expression,start,length 不多說了,取子串 right char expr,int expr 返回字串右邊int expr個字元 字元操作類 upp...