PostgreSQL学习笔记5之函数和操作符<一>

前端之家收集整理的这篇文章主要介绍了PostgreSQL学习笔记5之函数和操作符<一>前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

一、逻辑操作符:@H_301_4@@H_301_4@

常用的逻辑操作符有:AND@H_301_4@OR@H_301_4@NOT@H_301_4@。其语义与其它编程语言中的逻辑操作符完全相同。

二、比较操作符:@H_301_4@@H_301_4@

下面是Postgresql中提供的比较操作符列表:
@H_301_4@

操作符@H_301_4@@H_301_4@ 描述@H_301_4@@H_301_4@
<@H_301_4@ 小于@H_301_4@
>@H_301_4@ 大于@H_301_4@
<=@H_301_4@ 小于或等于@H_301_4@
>=@H_301_4@ 大于或等于@H_301_4@
=@H_301_4@ 等于@H_301_4@
!=@H_301_4@ 不等于@H_301_4@

比较操作符可以用于所有可以比较的数据类型。所有比较操作符都是双目操作符,且返回boolean类型。除了比较操作符以外,我们还可以使用BETWEEN语句,如:@H_301_4@
aBETWEENxANDy等效于@H_301_4@a >= xANDa <= y
aNOT BETWEENxANDy等效于@H_301_4@a < xORa > y

三、 数学函数和操作符:@H_301_4@@H_301_4@

下面是Postgresql中提供的数学操作符列表:@H_301_4@

描述@H_301_4@@H_301_4@ 例子@H_301_4@@H_301_4@ 结果@H_301_4@@H_301_4@
+@H_301_4@ 加@H_301_4@ 2 + 3@H_301_4@ 5@H_301_4@
-@H_301_4@ 减@H_301_4@ 2 - 3@H_301_4@ -1@H_301_4@
*@H_301_4@ 乘@H_301_4@ 2 * 3@H_301_4@ 6@H_301_4@
/@H_301_4@ 除@H_301_4@ 4 / 2@H_301_4@ 2@H_301_4@
%@H_301_4@ 模@H_301_4@ 5 % 4@H_301_4@ 1@H_301_4@
^@H_301_4@ 幂@H_301_4@ 2.0 ^ 3.0@H_301_4@ 8@H_301_4@
|/@H_301_4@ 平方根@H_301_4@ |/ 25.0@H_301_4@ ||/@H_301_4@ 立方根@H_301_4@ ||/ 27.0@H_301_4@ 3@H_301_4@
!@H_301_4@ 阶乘@H_301_4@ 5 !@H_301_4@ 120@H_301_4@
!!@H_301_4@ !! 5@H_301_4@ @@H_301_4@ 绝对值@H_301_4@ @ -5.0@H_301_4@ &@H_301_4@ 按位AND@H_301_4@ 91 & 15@H_301_4@ 11@H_301_4@
|@H_301_4@ 按位OR@H_301_4@ 32 | 3@H_301_4@ 35@H_301_4@
#@H_301_4@ 按位XOR@H_301_4@ 17 # 5@H_301_4@ 20@H_301_4@
~@H_301_4@ 按位NOT@H_301_4@ ~1@H_301_4@ -2@H_301_4@
<<@H_301_4@ 按位左移@H_301_4@ 1 << 4@H_301_4@ 16@H_301_4@
>>@H_301_4@ 按位右移@H_301_4@ 8 >> 2@H_301_4@ 2@H_301_4@

按位操作符只能用于整数类型,而其它的操作符可以用于全部数值数据类型。按位操作符还可以用于位串类型bit和bit varying,

下面是Postgresql中提供的数学函数列表,需要说明的是,这些函数中有许多都存在多种形式,区别只是参数类型不同。除非特别指明,任何特定形式的函数都返回和它的参数相同的数据类型。

函数@H_301_4@@H_301_4@ 返回类型
@H_301_4@@H_301_4@
例子
@H_301_4@@H_301_4@
abs(x)@H_301_4@ abs(-17.4)@H_301_4@ 17.4@H_301_4@
cbrt(double)@H_301_4@ cbrt(27.0)@H_301_4@ ceil(double/numeric)@H_301_4@ 不小于参数的最小的整数@H_301_4@ ceil(-42.8)@H_301_4@ -42@H_301_4@
degrees(double)
@H_301_4@
把弧度转为角度@H_301_4@ degrees(0.5)@H_301_4@ 28.6478897565412@H_301_4@
exp(double/numeric)@H_301_4@ 自然指数@H_301_4@ exp(1.0)@H_301_4@ 2.71828182845905@H_301_4@
floor(double/numeric)@H_301_4@ 不大于参数的最大整数@H_301_4@ floor(-42.8)@H_301_4@ -43@H_301_4@
ln(double/numeric)@H_301_4@ 自然对数@H_301_4@ ln(2.0)@H_301_4@ 0.693147180559945@H_301_4@
log(double/numeric)@H_301_4@ 10为底的对数@H_301_4@ log(100.0)@H_301_4@ log(b numeric,x numeric)@H_301_4@ numeric指定底数的对数@H_301_4@ log(2.0,64.0)@H_301_4@ 6.0000000000@H_301_4@
mod(y,x)@H_301_4@ 取余数@H_301_4@ mod(9,4)@H_301_4@ pi()
@H_301_4@
double@H_301_4@ "π"常量@H_301_4@ 3.14159265358979@H_301_4@
power(a double,b double)@H_301_4@ 求a的b次幂@H_301_4@ power(9.0,3.0)@H_301_4@ 729@H_301_4@
power(a numeric,b numeric)@H_301_4@ numeric@H_301_4@ radians(double)@H_301_4@ 把角度转为弧度@H_301_4@ radians(45.0)@H_301_4@ 0.785398163397448@H_301_4@
random()@H_301_4@ 0.0到1.0之间的随机数值@H_301_4@
round(double/numeric)@H_301_4@ 圆整为最接近的整数@H_301_4@ round(42.4)@H_301_4@ 42@H_301_4@
round(v numeric,s int)@H_301_4@ 圆整为s位小数数字@H_301_4@ round(42.438,2)@H_301_4@ 42.44@H_301_4@
sign(double/numeric)@H_301_4@ 参数的符号(-1,+1)
@H_301_4@
sign(-8.4)@H_301_4@ sqrt(double/numeric)@H_301_4@ sqrt(2.0)@H_301_4@ 1.4142135623731@H_301_4@
trunc(double/numeric)@H_301_4@ 截断(向零靠近)@H_301_4@ trunc(42.8)@H_301_4@ trunc(v numeric,255); font-size:13px">截断为s小数位置的数字@H_301_4@ trunc(42.438,255); font-size:13px">42.43@H_301_4@

@H_301_4@三角函数列表:

函数@H_301_4@
描述@H_301_4@
acos(x)@H_301_4@ 反余弦@H_301_4@
asin(x)@H_301_4@ 反正弦@H_301_4@
atan(x)@H_301_4@ 反正切@H_301_4@
atan2(x,y)@H_301_4@ 正切 y/x 的反函数@H_301_4@
cos(x)@H_301_4@ 余弦@H_301_4@
cot(x)@H_301_4@ 余切@H_301_4@
sin(x)@H_301_4@ 正弦@H_301_4@
tan(x)@H_301_4@ 正切@H_301_4@


四、字符串函数和操作符:@H_301_4@@H_301_4@

下面是Postgresql中提供的字符串操作符列表:

函数@H_301_4@ 返回类型@H_301_4@ 描述@H_301_4@ 例子@H_301_4@ 结果@H_301_4@
string || string@H_301_4@ text@H_301_4@ 字串连接@H_301_4@ 'Post' || 'gresql'@H_301_4@ Postgresql@H_301_4@
bit_length(string)@H_301_4@ int@H_301_4@ 字串里二进制位的个数@H_301_4@ bit_length('jose')@H_301_4@ 32@H_301_4@
char_length(string)@H_301_4@ 字串中的字符个数@H_301_4@ char_length('jose')@H_301_4@ 4@H_301_4@
convert(string using conversion_name)@H_301_4@ 使用指定的转换名字改变编码。@H_301_4@ convert('Postgresql' using iso_8859_1_to_utf8)@H_301_4@ 'Postgresql'@H_301_4@
lower(string)@H_301_4@ 把字串转化为小写@H_301_4@ lower('TOM')@H_301_4@ tom@H_301_4@
octet_length(string)@H_301_4@ 字串中的字节数@H_301_4@ octet_length('jose')@H_301_4@ overlay(string placing string from int [for int])@H_301_4@ 替换子字串@H_301_4@ overlay('Txxxxas' placing 'hom' from 2 for 4)@H_301_4@ Thomas@H_301_4@
position(substring in string)@H_301_4@ 指定的子字串的位置@H_301_4@ position('om' in 'Thomas')@H_301_4@ 3@H_301_4@
substring(string [from int] [for int])@H_301_4@ 抽取子字串@H_301_4@ substring('Thomas' from 2 for 3)@H_301_4@ hom@H_301_4@
substring(string from pattern)@H_301_4@ 抽取匹配 POSIX 正则表达式的子字串@H_301_4@ substring('Thomas' from '...$')@H_301_4@ mas@H_301_4@
substring(string from pattern for escape)@H_301_4@ 抽取匹配sql正则表达式的子字串@H_301_4@ substring('Thomas' from '%#"o_a#"_' for '#')@H_301_4@ oma@H_301_4@
trim([leading | trailing | both] [characters] from string)@H_301_4@ 从字串string的开头/结尾/两边/ 删除只包含characters(缺省是一个空白)的最长的字串@H_301_4@ trim(both 'x' from 'xTomxx')@H_301_4@ Tom@H_301_4@
upper(string)@H_301_4@ 把字串转化为大写。@H_301_4@ upper('tom')@H_301_4@ TOM@H_301_4@
ascii(text)@H_301_4@ 参数第一个字符的ASCII码@H_301_4@ ascii('x')@H_301_4@ 120@H_301_4@
btrim(string text [,characters text])@H_301_4@ 从string开头和结尾删除只包含在characters里(缺省是空白)的字符的最长字串@H_301_4@ btrim('xyxtrimyyx','xy')@H_301_4@ trim@H_301_4@
chr(int)@H_301_4@ 给出ASCII码的字符@H_301_4@ chr(65)@H_301_4@ A@H_301_4@
convert(string text,[src_encoding name,] dest_encoding name)@H_301_4@ 把字串转换为dest_encoding@H_301_4@ convert( 'text_in_utf8','UTF8','LATIN1')@H_301_4@ 以ISO 8859-1编码表示的text_in_utf8@H_301_4@
initcap(text)@H_301_4@ 把每个单词的第一个子母转为大写,其它的保留小写。单词是一系列字母数字组成的字符,用非字母数字分隔。@H_301_4@ initcap('hi thomas')@H_301_4@ Hi Thomas@H_301_4@
length(string text)@H_301_4@ string中字符的数目@H_301_4@ length('jose')@H_301_4@ lpad(string text,length int [,fill text])@H_301_4@ 通过填充字符fill(缺省时为空白),把string填充为长度length。 如果string已经比length长则将其截断(在右边)。@H_301_4@ lpad('hi',5,255)">xyxhi@H_301_4@
ltrim(string text [,255)">从字串string的开头删除只包含characters(缺省是一个空白)的最长的字串。@H_301_4@ ltrim('zzzytrim','xyz')@H_301_4@ md5(string text)@H_301_4@ 计算给出string的MD5散列,以十六进制返回结果。@H_301_4@ md5('abc')@H_301_4@ repeat(string text,number int)@H_301_4@ 重复string number次。@H_301_4@ repeat('Pg',255)">PgPgPgPg@H_301_4@
replace(string text,from text,to text)@H_301_4@ 把字串string里出现地所有子字串from替换成子字串to。@H_301_4@ replace('abcdefabcdef','cd','XX')@H_301_4@ abXXefabXXef@H_301_4@
rpad(string text,255)">通过填充字符fill(缺省时为空白),把string填充为长度length。如果string已经比length长则将其截断。@H_301_4@ rpad('hi',255)">hixyx@H_301_4@
rtrim(string text [,character text])@H_301_4@ 从字串string的结尾删除只包含character(缺省是个空白)的最长的字@H_301_4@ rtrim('trimxxxx','x')@H_301_4@ split_part(string text,delimiter text,field int)@H_301_4@ 根据delimiter分隔string返回生成的第field个子字串(1 Base)。@H_301_4@ split_part('abc~@~def~@~ghi','~@~',255)">def@H_301_4@
strpos(string,substring)@H_301_4@ 声明的子字串的位置。@H_301_4@ strpos('high','ig')@H_301_4@ 2@H_301_4@
substr(string,from [,count])@H_301_4@ 抽取子字串。@H_301_4@ substr('alphabet',3,255)">ph@H_301_4@
to_ascii(text [,encoding])@H_301_4@ 把text从其它编码转换为ASCII。@H_301_4@ to_ascii('Karel')@H_301_4@ Karel@H_301_4@
to_hex(number int/bigint)@H_301_4@ 把number转换成其对应地十六进制表现形式。@H_301_4@ to_hex(9223372036854775807)@H_301_4@ 7fffffffffffffff@H_301_4@
translate(string text,255)">把在string中包含的任何匹配from中的字符的字符转化为对应的在to中的字符。@H_301_4@ translate('12345','14','ax')@H_301_4@ a23x5@H_301_4@

五、位串函数和操作符:@H_301_4@@H_301_4@

对于类型bit和bit varying,除了常用的比较操作符之外,还可以使用以下列表中由Postgresql提供的位串函数和操作符,其中&、|和#的位串操作数必须等长。在移位的时候,保留原始的位串的的长度。

操作符@H_301_4@
描述@H_301_4@ 例子@H_301_4@ 结果@H_301_4@
||@H_301_4@ 连接@H_301_4@ B'10001' || B'011'@H_301_4@ 10001011@H_301_4@
B'10001' & B'01101'@H_301_4@ 00001@H_301_4@
B'10001' | B'01101'@H_301_4@ 11101@H_301_4@
B'10001' # B'01101'@H_301_4@ 11100@H_301_4@
~ B'10001'@H_301_4@ 01110@H_301_4@
B'10001' << 3@H_301_4@ 01000@H_301_4@
B'10001' >> 2@H_301_4@ 00100@H_301_4@

除了以上列表中提及的操作符之外,位串还可以使用字符串函数:length, bit_length, octet_length, position, substring。此外,我们还可以在整数和bit之间来回转换,如:
MyTest=# SELECT 44::bit(10);@H_301_4@
bit
------------
0000101100
(1 row)
MyTest=# SELECT 44::bit(3);@H_301_4@
bit
-----
100
(1 row)
MyTest=# SELECT cast(-44 as bit(12));@H_301_4@
bit
--------------
111111010100
(1 row)
MyTest=# SELECT '1110'::bit(4)::integer;@H_301_4@
int4
------
14
(1 row)
注意:如果只是转换为"bit",意思是转换成bit(1),因此只会转换成整数的最低位。


转载自:http://www.cnblogs.com/stephen-liu74/archive/2011/12/19/2294071.html

猜你在找的Postgre SQL相关文章