SqlServer转Oracle时代码注意事项

来源:互联网 发布:php 异步执行函数 编辑:程序博客网 时间:2024/06/07 01:34
 1

Oracle:nvl

SqlServer:isnull

 2

insert,update,delete等用分号隔开的sql语句,必须前加begin,后加commit;end;并且去掉中间所有的\r\n。

select时,一个sql语句中不能包含多个select语句

/// <summary>
/// 将在SqlServer中,用分号隔开的多句sql语句,改为在Oracle中执行的Sql
/// 前面加begin,后面加end,去掉所有的\r\n
/// </summary>
/// <param name="_sqlserverSql"></param>
/// <returns></returns>
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'张三' 4sql语句中的+,改为|| 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中,给表定义别名的时候不能加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),否则会报错

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 淘宝小二胡乱判怎么办 淘宝卖家不干了怎么办 花呗剩下的钱怎么办 蚂蚁花呗无法使用怎么办 淘宝不能用花呗怎么办 淘宝号给冻结了怎么办 淘宝买家号封了怎么办 拼多多商家盗图怎么办 被拼多多盗图了怎么办 淘宝盗用图片被投诉怎么办 淘宝别人盗用我的图片怎么办 淘宝盗图申诉原图过大怎么办 淘宝别人举报我盗用图片怎么办 淘宝卖家被投诉盗图怎么办 淘宝卖家被投诉卖假货怎么办 淘宝买到假货卖家不承认怎么办 被投诉盗图扣2分怎么办 拼多多盗淘宝图怎么办 微信视频清理了怎么办 牛仔短裤买大了怎么办 淘宝图片打开变大了怎么办 同城换公司社保怎么办 劳务不给交社保怎么办 好多工厂外包工不交社保怎么办 外包公司没有交社保怎么办 外包公司不给交社保怎么办 银行取100万现金怎么办 给老外发警告信后怎么办 照片上传是歪的怎么办 日亚不能直邮的怎么办 电话信息被卖了怎么办 被亚马逊跟卖了怎么办 玉米出芽后土壤不够湿怎么办 雨伞请输入授权码怎么办 网页放手机端后看不了怎么办 微信收款码存在违法行为怎么办 tst优惠码密码忘了怎么办 扩展器登录不上怎么办 微信学法小程序积分不更新怎么办 开发商不给办房产证怎么办 传淘宝产品规格不匹配怎么办