MSSql跟PostgreSQL的查询结果的小数点差异(求助)
两个数据表在定义时都定义成
create table table1 (col1 numeric(14,2))
但是查看数据库里两个库的数据显示:
PostgreSQL:20
MSSql :20.00
用sql文查询出的结果,问题更明显了。
select COALESCE(col1 / 100, 0) from table1
PostgreSQL:0
MSSql :.000000
我现在在做数据库转换,从PostgreSQL转换到MSSql,因为这些SQL文,会被一些张票,CSV使用,还有些是写入到TXT文件中,TXT文件传给别的程序做输入参数,怕这样的结果会对程序有影响。
请教高手,怎么能屏蔽这种问题。让程序在MSSql中运行的结果跟PostgreSQL的一样。(PostgreSQL 转换到 MSSql)
我现在想从根源 ,也就是SQL文入手,让他们查出的结果都一样。
这里我想用到转换,cast(col1 as numeric(14,2)) ;cast(col1 as numeric(14,0))
但是PostgreSQL这个数据库,上面的结果 0的时候他显示0 要是有小数点它又能正常显示小数点,
这样硬转换想必会有漏洞。
请高手指教啊!
------解决方案--------------------不可以转。
转了就丢数据了。
------解决方案--------------------最好使用标准SQL,并保证数据类型的一致
------解决方案--------------------把结果转成字符串,去除尾数0,还要注意小数点。有处理过类似问题
------解决方案--------------------
你说的对,sql server只会按照优先级最后的类型和精度,来转化 合并的。
很多数据库都不同,包括:oracle和sql server也不同。