Sybase:数据类型(对比sqlserver)

今天突然想到sql保留小数的问题,网上找了找找了一些实用的参考,对初学者很有帮助的,有需要的可以参考下。

  • SQL Server 2000 小数类型-decimal 和
    numeric
  • SQL Server 2000 小数类型-float 和
    real
  • SQL Server 2000 小数类型-使用 decimal、float 和 real
    数据
  • SQL Server 2000 小数类型-精度、小数位数和长度

字符数字类型:

在sql中,要??抵颠M行四?挝迦耄?umeric,decimal 等函?刀疾辉试S?置??底?量,


  • char、varchar、long varchar
  • nchar、nvarchar、long nvarchar
  • 通过域实现兼容sqlserver的数据类型:sysname(varchar(30))、text(long
    varchar域)、ntext(long nvarchar域)、xml(long
    varchar域)、uniqueidentifierstr(char(36)的域:映射为sqlserver的uniqueidentifier列)

1.cast(@value as numeric(18,@decount))

精度是数中的数字个数。小数位数是数中小数点右边的数字个数。例如,数
123.45 的精度是 5,小数位数是2。

sybase和sqlserver不同,所有字符数据类型的存储结构是相同的。默认情况下:在一段中存储不超过128个字节的值;如果超过128个字节的值的完整值保存在其他页面上,本地仅仅保存4个字节的指向完整值的地址。默认值由create
table语句的inline和prefix字句控制。
sybase和sqlserver不同,字符数据类型的长度区分字节长度和字符长度,默认为字节长度。
sybase和sqlserver不同,char类型在行为上是和varchar相同的。sql
anywhere不会用空白字符填充数据
当客户端程序对字符数据类型的列执行describe时,视所用的程序接口不同,使用字符长度语义定义可能会影响返回的值。

2.cast(@value as decimal(18,@deccount))

numericdecimal 数据类型默认的最大精度是 38。在 SQL Server
早期版本中,默认的最大值是 28。

 

都?箦e.

数字数据类型的长度是存储此数所占用的字节数。字符串或 Unicode
数据类型的长度是字符个数。binary、varbinary、image
数据类型的长度是字节数。例如,int 数据类型可以有 10 位数,用 4
个字节存储,不接受小数点。int 数据类型的精度是 10,长度是
4,小数位数是 0。

数字数据类型:

有效的sql四?挝迦敕椒?

当两个 char、varchar、binaryvarbinary
表达式串联时,结果表达式的长度是这两个源表达式长度之和,或是 8,000
字符,以二者中少者计。

  • bigint、bit、decimal、int、integer、numeric、smallint、tinyint
  • double、float(p)、real
  • 通过域实现兼容sqlserver的数据类型:money(numeric(19,4))、smallmoney(numeric(10,4))

declare @value float,@morecount int,@decount int

当两个 ncharnvarchar
表达式串联时,结果表达式的长度是两个源表达式长度之和,或是 4,000
字符,以二者中少者计。

必须注意:精度、小数位数、数字个数问题
sybase默认bit类型不允许为空,而sqlserver则无此限制
sybase规定除了bit以外的整数类型可以有unsigned修饰,而sqlserver则无此修饰

–@value:要?行四?挝迦氲?抵?/p>

除了 decimal
类型之外,数字数据类型的精度和小数位数是固定的。如果算术运算符有两个相同类型的表达式,结果就为该数据类型,并且有对此类型定义的精度和小数位数。如果运算符有两个不同数字数据类型的表达式,数据类型优先规则决定结果的数据类型。结果为该数据类型定义的精度和小数位数。

 

–@morecount:任意大於要保留的小?滴?档闹?/p>

下表定义了当运算的结果是 decimal
类型时,结果的精度和小数位数是如何计算的。当以下情况时,结果是
decimal 类型:

位数组数据类型:只能存储0和1组成的数据:整数的二进制表示

–@decount:要保留的小?滴??/p>

  1. 两个表达式是 decimal 类型。

  2. 一个表达式是 decimal 类型,而另一个是比 decimal
    优先顺序低的数据类型。

  • varbit、bit varying、long varbit、long bit varying

select LTRIM(STR(CAST(@value as decimal(20, @morecount)),18,@decount))

操作数表达式由表达式 e1(精度为 p1,小数位数为 s1)和表达式 e2(精度为
p2,小数位数为 s2)来表示。非 decimal
类型的表达式的精度和小数位数,是对此表达式数据类型定义的精度和小数位数。

 

除法保留小数

操作 结果精度 结果小数位数 *
e1 + e2 max(s1, s2) + max(p1-s1, p2-s2) + 1 max(s1, s2)
e1 – e2 max(s1, s2) + max(p1-s1, p2-s2) max(s1, s2)
e1 * e2 p1 + p2 + 1 s1 + s2
e1 / e2 p1 – s1 + s2 + max(6, s1 + p2 + 1) max(6, s1 + p2 + 1)

二进制数据类型:逐字节比较、不进行字符集转换
binary、long binary、varbinary、binary
varying、uniqueidentifier(又称uuid或guid)
通过域实现兼容sqlserver的数据类型:image(long binary)
sybase的二进制数据和sqlserver的二进制数据类型最大长度大小不同:为32767而不是80000
sybase的binary虽然类型和varbinary不同,但sybase总是那它当做varbinary处理

select cast(cast(10 as float)/3 as decimal(10,2)) as print

* 结果精度和小数位数有绝对最大值 38。当结果精度大于 38
时,相应的小数位数会减少,以避免结果的整数部分被截断。

 

还有Ceiling和Floor函数

  • SQL Server 2000 小数类型-decimal 和
    numeric
  • SQL Server 2000 小数类型-float 和
    real
  • SQL Server 2000 小数类型-使用 decimal、float 和 real
    数据
  • SQL Server 2000 小数类型-精度、小数位数和长度

日期和时间类型:

一个是上取整,一个是下取整,很好用咯


  • date、time、timestamp
  • 通过域实现兼容sqlserver的数据类型:datetime(timestamp)、smalldatetime(timestamp)

小数类型-精度、小数位数和长度

sybase的日期和时间类型和sqlserver的有很大不同,sqlserver有datetime、smalldatetime两种类型且
能表示的范围和精度较小。
sqlserver中的timestamp类型为一表示行版本的二进制串,和sybase的timestamp日期时间类型根本不同
sybase中,无论:接口如何,是否是odbc格式,是否是嵌入sql的格式,是否指定了date_order,“yyyy-mm-dd”、“yyyy/mm/dd”格式总是可以正确解析为日期;“hh:mm:ss:ssss”将明确的解释为时间;二者的组合总能产生明确的日期时间;“yyyy-mm-dd
hh.mm.ss.sss”也可以产生明确的日期时间,时间中的句点号仅仅能用在和日期组合的情况下!!

精度是数中的数字个数。小数位数是数中小数点右边的数字个数。例如,数
123.45 的精度是 5,小数位数是2。

 

numeric 和 decimal 数据类型默认的最大精度是 38。在 SQL Server
早期版本中,默认的最大值是 28。

域:用户自定义数据类型:内置数据类型的别名,包括:精度、小数位数、default值、check约束、为null性。
域的存在,有利于整个数据库的一致性,并可以消除一些类型错误
sybase的域的定义和使用及功能及要求和sqlserver的完全一样

数字数据类型的长度是存储此数所占用的字节数。字符串或 Unicode
数据类型的长度是字符个数。binary、varbinary、和 image
数据类型的长度是字节数。例如,int 数据类型可以有 10 位数,用 4
个字节存储,不接受小数点。int 数据类型的精度是 10,长度是 4,小数位数是
0。

 

当两个 char、varchar、binary 或 varbinary
表达式串联时,结果表达式的长度是这两个源表达式长度之和,或是 8,000
字符,以二者中少者计。

数据类型转换:

当两个 nchar 或 nvarchar
表达式串联时,结果表达式的长度是两个源表达式长度之和,或是 4,000
字符,以二者中少者计。

  • cast、convert显示转换;类型函数如date、string、数字类型+0.0;隐式转换
  • 字符集转换的丢失和字符替换问题
  • java数据类型和sql数据类型依照 jdbc标准执行转换
  • 不同数据类型的转换需要认真研读、实践,sybase和sqlserver以及不同的rdbms系统均不会完全相同

除了 decimal
类型之外,数字数据类型的精度和小数位数是固定的。如果算术运算符有两个相同类型的表达式,结果就为该数据类型,并且有对此类型定义的精度和小数位数。如果运算符有两个不同数字数据类型的表达式,数据类型优先规则决定结果的数据类型。结果为该数据类型定义的精度和小数位数。

下表定义了当运算的结果是 decimal
类型时,结果的精度和小数位数是如何计算的。当以下情况时,结果是 decimal
类型:

两个表达式是 decimal 类型。

一个表达式是 decimal 类型,而另一个是比 decimal 优先顺序低的数据类型。
操作数表达式由表达式 e1和表达式 e2来表示。非 decimal
类型的表达式的精度和小数位数,是对此表达式数据类型定义的精度和小数位数。

发表评论

电子邮件地址不会被公开。 必填项已用*标注