SQLserver字段类型转oracle,SqlServer转Oracle时代码注意事
项
Oracle:nvl
SqlServer:isnull
2
insert,update,delete等⽤分号隔开的sql语句,必须前加begin,后加commit;end;并且去掉中间所有的\r\n。
select时,⼀个sql语句中不能包含多个select语句
/// /// 将在SqlServer中,⽤分号隔开的多句sql语句,改为在Oracle中执⾏的Sql
/// 前⾯加begin,后⾯加end,去掉所有的\r\n
///
///
///
public static string ConvertMultipleSqlFromSqlserverToOracle(string _sqlserverSql)
{
if (Global.CacheServerConfiger.IsOracle)
{
_sqlserverSql = _sqlserverSql.Trim();
if (!_sqlserverSql.EndsWith(";"))
{
_sqlserverSql += ";";
}
_sqlserverSql = _sqlserverSql.Replace("\r\n", " ").Replace("\n", " ");
_sqlserverSql = "begin " + _sqlserverSql + " commit;end;";
}
return _sqlserverSql;
}
3
当数据类型为nvarchar2时,最好前⾯加N,例如insert into a(nvarchar2field) values(N'中⽂'),查询时where⼦句也如此,例如where name = N'张三'
4
sql语句中的+,改为||
5
Oracle中,在sql中做除法时,需要进⾏以下操作,否则c#中会算术溢出
round(count(*)/(cast(3 as float)), 28) --cast(3 as float)是为了和sqlserver保持⼀致,28是最⼤精度,不能⼤于28
6
⽇期在SqlServer中可以按照字符串操作,但在Oracle中不⾏
--Oracle中插⼊时也必须做如下转换
Oracle:to_date('2010-12-21 12:02:30','YYYY-MM-DD HH24:MI:SS')
--SqlServer插⼊或者where⼦句中都可以直接使⽤字符串,但where⼦句中使⽤字符串,会加快查询速度
SqlServer:convert(datetime,''2010-12-21 12:02:30')
7
想要保存⼀个时间的毫秒数,Oracle中的字段类型必须为timestamp,不能为date,因为date只保存时间值到秒。
-
-Oracle中插⼊时也必须做如下转换
Oracle:to_timestamp('2010-12-21 12:02:30.230940','YYYY-MM-DD HH24:MI:SS.FF')
--SqlServer插⼊或者where⼦句中都可以直接使⽤字符串,但where⼦句中使⽤字符串,会加快查询速度
SqlServer:Convert(datetime,'2010-12-21 12:02:30.230940')
8
sql中⽇期想减得到秒的⽅法
Oracle: CAST((sysdate- to_date('2010-12-21 12:02:30','YYYY-MM-DD HH24:MI:SS'))*24*60*60 as float) SqlServer:CONVERT(float, datediff(second, to_date('2010-12-21 12:02:30','YYYY-MM-DD HH24:MI:SS'), getdate())) 9
Oracle中字段不允许存⼊'',即空字符串,只有null值,所以where⼦句中判断空值⽅法为:
Oracle:字段名 is null
SqlServer:(字段名 is null or 字段名 = '')
判断不为空值的⽅法
Oracle:字段名 is not null
SqlServer:(字段名 is not null and 字段名 != '')
10
Oracle中Top N的写法:
--注意:Order by要写在⼦查询⾥,rownum是从1开始的
select * from
(
select * from c_itcomp order by d_controladderss
)
where rownum <100
排序后从第4条记录取⾄第9条记录
select * from
(
select rownum as num, t.* from
(
select a.* from a order by b
) t
)
where num > 3 and num < 10
11
oracle decimal类型
Oracle中,给表定义别名的时候不能加as
例如:select * from 表名 as 别名注意,这是错误的,正确的应该是
select * from 表名 别名
12
Oracle中,字段的别名不能加单引号
例如:select 字段名 as '别名' from dual注意,这是错误的,正确的应该是
select 字段名 as 别名 from dual
13
Oracle中没有select sysdate as nowDate的写法,正确的应该是加个虚表dual
select sysdate as nowDate from dual
14
Oracle中,字段名,表名,别名,索引名,视图名等名称的长度不能超过30个字符
15
Oracle中,字段名都是⼤写的,即使select语句中是⼩写,得到的结果也是⼤写。因此,select到DataTable中后,binding到wpf时如果⼤⼩写不同,会绑定失败。在DataTable中分组和排序,也会失败。因此,尽量将DataTable中的字段名称改为⼤写。
16
Oracle中的Integer类型,在C#中是Decimal,因此,在C#中从DataTable取值进⾏类型转换时:
若要转成Int类型,需使⽤Convert.ToInt32,⽽不能使⽤(int),否则会报错
若要转成Bool类型,需使⽤Convert.ToBoolean,⽽不能使⽤(bool),否则会报错
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论