有问题把,应该是0.2吧,我试了一下:
create table table1 (col1 numeric(14,2))insert into table1
values(20)select (col1/ 100) from table1
/*
0.200000
*/
create table table1 (col1 numeric(14,2))insert into table1
values(20)select (col1/ 100) from table1
/*
0.200000
*/
解决方案 »
- sqlserver2005怎么转换成access数据库?
- 简单ER图制作
- 超难的SQL,语句!望高手帮忙
- 怎么解决这个错误:键列信息不足或不正确。更新影响到多行!!!!
- 如何用一条语句来统计单选项里最高值的和以及所选值的和,然后还要分类显示出来?难度很大!
- 怎样安装SQL
- 求序号列的生成办法SQL语句?
- 请教大虾,有VC++基础.未作过数据库项目,现在想学习,请问学什么DBMS和相适应的开发工具语言比较好呢?VC在DB方面似乎有点麻烦!
- 关于大型集团信息门户网站的数据库设计,有这方面经验的请进!!!
- pb与sql server 的使用问题
- 新人求助,oracle转换成sql server
- 怎样才能查询某条记录添加的时间 #####################100%结贴
也变成 20但是也有有小数点的时候,那时候也要跟postgre一样,
如上面 0.2
SELECT COALESCE((SELECT 5.12345 WHERE 1=2),0) AS COL1
这个SQL文
postgre:
SELECT COALESCE((SELECT 5.12345 WHERE 1=2),0) AS COL1
这个SQL文
postgre:0
sqlserver:.00000sqlserver自动匹配了该字段所有可能的类型,0也给设定成 可能的小数位数。00000
SELECT COALESCE((SELECT 5.12345 WHERE 1=2),0) AS COL1
这个SQL文
postgre:这个语句的结果是 null把
这个倒是没关系,只要目标的数据类型是numeric,应该也不会有什么问题的,只是表示方式不同,一个是0,一个是0.0000
这个倒是没关系,只要目标的数据类型是numeric,应该也不会有什么问题的,只是表示方式不同,一个是0,一个是0.0000对于值来讲没有什么问题,怕的是 将这种数据写入到CSV或是TXT的时候怕出问题啊!
一些批处理,会按位截取数据,就怕这种情况,因为要确定的地方很多,所以怕出问题。
这个倒是没关系,只要目标的数据类型是numeric,应该也不会有什么问题的,只是表示方式不同,一个是0,一个是0.0000对于值来讲没有什么问题,怕的是 将这种数据写入到CSV或是TXT的时候怕出问题啊!
一些批处理,会按位截取数据,就怕这种情况,因为要确定的地方很多,所以怕出问题。但是就算截断数据,这个应该也不会有什么问题的吧。你的整个处理流程是怎么样的?是先把postgre中的数据导出成txt,然后再导入到sql server吗?
这个倒是没关系,只要目标的数据类型是numeric,应该也不会有什么问题的,只是表示方式不同,一个是0,一个是0.0000对于值来讲没有什么问题,怕的是 将这种数据写入到CSV或是TXT的时候怕出问题啊!
一些批处理,会按位截取数据,就怕这种情况,因为要确定的地方很多,所以怕出问题。但是就算截断数据,这个应该也不会有什么问题的吧。你的整个处理流程是怎么样的?是先把postgre中的数据导出成txt,然后再导入到sql server吗?不是这样的,数据从 postgre 导入到 sql server 只是转换的过程。以后就是sql server处理自己的数据了,就是这两个数据库用的程序是同一个,现在是在做一个SQLSERVER版本的。现在程序中用到SQL文的地方实在太多了,从根源改工作量应该是最少的。从sql server里取出数据按照一定的处理,写入TXT文件,这个TXT文件发送给别的系统用,因为有的是按照位数截断的,好比我给了这个字段15位(numeric(14,2)),现在SQLSERVER查询的结果带了好多个0,(123456789012.1234000000)在不改动现有程序的情况下,可能会出问题的。
这个倒是没关系,只要目标的数据类型是numeric,应该也不会有什么问题的,只是表示方式不同,一个是0,一个是0.0000对于值来讲没有什么问题,怕的是 将这种数据写入到CSV或是TXT的时候怕出问题啊!
一些批处理,会按位截取数据,就怕这种情况,因为要确定的地方很多,所以怕出问题。但是就算截断数据,这个应该也不会有什么问题的吧。你的整个处理流程是怎么样的?是先把postgre中的数据导出成txt,然后再导入到sql server吗?不是这样的,数据从 postgre 导入到 sql server 只是转换的过程。以后就是sql server处理自己的数据了,就是这两个数据库用的程序是同一个,现在是在做一个SQLSERVER版本的。现在程序中用到SQL文的地方实在太多了,从根源改工作量应该是最少的。从sql server里取出数据按照一定的处理,写入TXT文件,这个TXT文件发送给别的系统用,因为有的是按照位数截断的,好比我给了这个字段15位(numeric(14,2)),现在SQLSERVER查询的结果带了好多个0,(123456789012.1234000000)在不改动现有程序的情况下,可能会出问题的。哦,你的意思是,把数据导入sql server,其他系统在处理数据时,可能会截断数据是吧
这个倒是没关系,只要目标的数据类型是numeric,应该也不会有什么问题的,只是表示方式不同,一个是0,一个是0.0000对于值来讲没有什么问题,怕的是 将这种数据写入到CSV或是TXT的时候怕出问题啊!
一些批处理,会按位截取数据,就怕这种情况,因为要确定的地方很多,所以怕出问题。但是就算截断数据,这个应该也不会有什么问题的吧。你的整个处理流程是怎么样的?是先把postgre中的数据导出成txt,然后再导入到sql server吗?不是这样的,数据从 postgre 导入到 sql server 只是转换的过程。以后就是sql server处理自己的数据了,就是这两个数据库用的程序是同一个,现在是在做一个SQLSERVER版本的。现在程序中用到SQL文的地方实在太多了,从根源改工作量应该是最少的。从sql server里取出数据按照一定的处理,写入TXT文件,这个TXT文件发送给别的系统用,因为有的是按照位数截断的,好比我给了这个字段15位(numeric(14,2)),现在SQLSERVER查询的结果带了好多个0,(123456789012.1234000000)在不改动现有程序的情况下,可能会出问题的。哦,你的意思是,把数据导入sql server,其他系统在处理数据时,可能会截断数据是吧是的
就是这个系统出个数据文件,传给其他系统处理,可能会出现这种情况。最好的办法就是让这两个数据库的SQL文查询的结果一样,因为我们的SQL文都是写在外部的文件中,用DBFulte编译成DLL来使用,所以我们修改外部的SQL文文件是最省事的,我已经做了一个工具,就是根据SQL文到各自的数据库去查数据,然后比较结果,我现在查出来有43个这种小数点位数不一样造成的不一致。这43个SQL文如果去调查都什么地方使用了,是否两个数据库程序跑的结果一样,影响的地方确实太多了……
通过 CAST(COL1 AS FLOAT) ,查询器里虽然查看是一样,但是在后台程序取到的确实不一样。postgre:
select col1 from table1
union ALL
select 0 as col1
查询器结果:
20
0
真实结果:
20.00
0sqlserver:
select col1 from table1
union ALL
select cast(0 as FLOAT) as col1
查询器结果:
20
0
真实结果:
20
0可以发现postgre同一个字段可以得到不同精确度的值,而SQLSERVER不能,它只能获得优先级最高的类型和精确度。
你说的对,sql server只会按照优先级最后的类型和精度,来转化 合并的。很多数据库都不同,包括:oracle和sql server也不同。
你说的对,sql server只会按照优先级最后的类型和精度,来转化 合并的。很多数据库都不同,包括:oracle和sql server也不同。是啊 呵呵 把这些搞清楚了,也不算浪费时间了!谢谢了!现在我又回到调查所有用到的地方,排除问题。