PostgreSQL 知识量:10 - 51 - 182
在PostgreSQL中,整数类型用于存储整数值。以下是PostgreSQL支持的整数类型及其描述:
smallint:一个较小范围的整数,占用2个字节的存储空间。存储范围是-32,768到32,767。
integer 或 int:通常用于表示整数,占用4个字节的存储空间。存储范围是-2,147,483,648到2,147,483,647。
bigint:一个较大的整数,占用8个字节的存储空间。存储范围是-9,223,372,036,854,775,808到9,223,372,036,854,775,807。
这些整数类型可以根据需求选择。例如,如果知道某列的值不会超过255,那么可以选择smallint类型。如果值的范围可能非常大,那么可以选择bigint类型。
在创建表时定义一个整数类型的列,可以指定其大小和是否无符号(只存储非负值)。例如:
CREATE TABLE example ( id smallint unsigned, value integer );
在上面的例子中,id列被定义为无符号的smallint类型,这意味着它只能存储非负值。而value列被定义为integer类型,它可以存储正数、负数或零。
在PostgreSQL中,任意精度数字类型通常指的是NUMERIC或DECIMAL类型。这些类型可以存储任意精度的数字,并且能够进行精确的计算。
NUMERIC或DECIMAL类型可以存储最多1000位精度的数字,这意味着它们非常适合用于存储货币金额和其他需要精确计算的场景。然而,值得注意的是,这些类型的运算速度比整数类型或浮点数类型要慢很多。
使用这些类型的语法如下:
NUMERIC(precision, scale)
其中,precision表示数字的总位数(包括小数点两边),而scale表示小数点后的位数。例如,NUMERIC(5,2)可以存储最大为999.99的数字。
此外,如果不指定精度和比例,PostgreSQL将创建一个可以存储任意精度的数值,并且不会将输入的数值转化为任何特定的比例。
需要注意的是,虽然NUMERIC和DECIMAL在PostgreSQL中是等效的,但在其他数据库系统中可能会有所不同。因此,当在不同的数据库系统中迁移数据时,需要确保使用正确的数据类型。
在PostgreSQL中,浮点类型用于存储浮点数值,即有小数部分的数字。以下是PostgreSQL支持的浮点类型及其描述:
real:单精度浮点数,占用4个字节的存储空间。它可以存储大约6到9位小数,具体取决于数值的范围。
double precision:双精度浮点数,占用8个字节的存储空间。它可以存储大约15到18位小数,具体取决于数值的范围。
这些浮点类型用于需要表示小数值的场景,如科学计算、金融等。然而,由于浮点数类型的精度限制,它们可能不适合用于需要精确计算的场景,例如货币或百分比。在这种情况下,使用NUMERIC或DECIMAL类型可能更为合适。
在创建表时定义一个浮点类型的列,可以指定其精度。例如:
CREATE TABLE example ( value real );
在上面的例子中,value列被定义为real类型,它可以存储单精度浮点数。
在PostgreSQL中,序列是一种特殊的数据库对象,用于生成唯一的数值。这些数值可以用于主键、唯一约束等场景,以确保数据的唯一性。
序列具有以下特点:
序列生成的值是唯一的,不会重复。
序列可以按照指定的增量、最小值、最大值等参数进行生成。
序列可以用于自动生成主键值、唯一标识符等。
在PostgreSQL中,可以使用SERIAL关键字来创建一个自增的整数列,该列将自动创建一个与之关联的序列。例如:
CREATE TABLE example ( id SERIAL PRIMARY KEY, name VARCHAR(50) );
在上面的例子中,id列被定义为自增的整数类型,并设置了主键约束。PostgreSQL将自动创建一个与该列关联的序列,以确保id列的唯一性。
除了使用SERIAL关键字创建自增列之外,还可以单独创建序列对象,并使用NEXTVAL和CURRVAL函数来手动控制序列的生成。例如:
CREATE SEQUENCE example_seq; INSERT INTO example (id, name) VALUES (NEXTVAL('example_seq'), 'John');
在上面的例子中,首先创建了一个名为example_seq的序列对象。然后,在插入数据时,使用NEXTVAL函数获取序列的下一个值,并将其插入到id列中。
PostgreSQL支持货币类型(money),这种类型用于存储固定小数精度的货币金额。具体来说,货币类型可以存储带有固定小数精度的货币金额,如98,765.43,它是一种存储固定小数的数值类型。
存储在货币类型列中的值,小数点后的位数是由数据库的lc_monetary设置决定的。这个设置位于/data/postgresql.conf文件中,默认配置如下:
lc_monetary = 'Chinese (Simplified)_China.936'
这意味着默认情况下,货币类型可以存储小数点后最多有9位数字的金额。
在实际开发中,通常会将整型、浮点数或双精度数值类型的值转换为货币类型。例如,numeric、int和bigint类型的值可以转换为货币类型。而浮点数处理货币类型可能存在舍入错误。
值得注意的是,由于货币类型输出格式带有前缀$或者¥,因此无法直接映射到Double、Float、Int等数值类型,尤其是在使用MyBatis框架时。为了解决这类问题,PostgreSQL提供了类型转换的实现方式。
在实际使用中,为了避免数据丢失或精度问题,建议在将其他数值类型转换为货币类型时进行适当的验证和转换处理。
好的,以下是一些常用的PostgreSQL数学运算符及其简要说明:
加法 (+):用于将两个数值相加。示例:SELECT 2 + 3; 返回 5。
减法 (-):用于从第一个数值中减去第二个数值。示例:SELECT 5 - 2; 返回 3。
乘法 (*):用于将两个数值相乘。示例:SELECT 3 * 4; 返回 12。
除法 (/):用于将第一个数值除以第二个数值。示例:SELECT 10 / 2; 返回 5。
取模 (%):返回除法操作的余数。示例:SELECT 10 % 3; 返回 1,因为10除以3的余数是1。
幂运算 (^ 或 POW):用于计算第一个数值的第二个数值次幂。示例:SELECT 2 ^ 3; 或 SELECT POW(2, 3); 都返回 8,因为2的3次方是8。
取反 (-):返回数的相反数。示例:SELECT -5; 返回 -5。
正号 (+):返回数的正值。这个运算符实际上不会改变数值,但可以用于明确表示正数。示例:SELECT +5; 返回 5。
负号 (-):返回数的负值。这个运算符实际上不会改变数值,但可以用于明确表示负数。示例:SELECT -(-5); 返回 5。
绝对值 (ABS):返回数的绝对值。示例:SELECT ABS(-5); 返回 5。
平方根 (SQRT):返回数的平方根。示例:SELECT SQRT(9); 返回 3。
自然对数 (LN):返回数的自然对数(以e为底)。示例:SELECT LN(10); (注意,这里的结果取决于数据库的精度设置)。
以10为底的对数 (LOG 或 LOG10):返回数以10为底的对数。示例:SELECT LOG(100); 或 SELECT LOG10(100); 都返回约2(因为100是10的2次方)。
其他对数函数:例如,以其他数字为底的对数,可以使用 LOG(base, number) 的形式来计算。例如 SELECT LOG(2,8); 会返回约3(因为8是2的3次方)。
三角函数:如正弦、余弦、正切等,用于计算角度的三角函数值。例如,可以使用 SIN(angle) 来计算角度的正弦值。这些函数需要弧度作为参数,而不是度数,可以使用 RADIANS(angle) 来将度数转换为弧度。例如,SELECT SIN(RADIANS(45)); 会返回约0.7(因为sin(45度)的值约为0.7)。其他三角函数包括 COS, TAN, ASIN, ACOS, ATAN, ATAN2, COSH, TANH, ASINH, ACOSH, 和 ATANH。
Copyright © 2017-Now pnotes.cn. All Rights Reserved.
编程学习笔记 保留所有权利
MARK:3.0.0.20240214.P35
From 2017.2.6