之所以寫這篇文章是因為我所做的專案是針對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...