SQL查询 |
本小节简要介绍各类型统计函数及运算符的使用,欲深入了解还需参阅相关SQL书籍文档。
系统中提供的SQL查询条件运算符除了常用的数学运算符和逻辑运算符外,还提供了一些比较特殊的运算符,下面将对系统提供的运算符进行简单说明,如表 2.1所示:
表 2.1 运算符说明列表
运算符 |
含义 |
举例 |
算术运算符 |
||
+ |
加法 |
RENT + UTILITIES <= 800 |
- |
减法 |
POP_2002 - POP_1994 |
* |
乘法 |
DENSITY * AREA > 5000000 |
/ |
除法 |
VALUE / POP = 50000 |
% |
取模 |
VALUE1 % VALUE2 |
比较运算符 |
||
= |
等于 |
CODE = 100 |
> |
大于 |
POP_2002 > 5000000 |
< |
小于 |
INDUST_GROWTH < 0 |
>= |
大于等于 |
RENT + UTILITIES >= 800 |
<= |
小于等于 |
RENT + UTILITIES <= 800 |
<> |
不等于 |
VALUE1 <> 100 |
! |
非,与“>”、“<”联合使用成“!<”(不小于)、“!>”(不大于) |
VALUE1 !> 100 VALUE1 !< 100 |
逻辑运算符 |
||
AND |
连接两个布尔型表达式并当两个表达式都为TRUE时返回TRUE |
CODE = 100 AND VALUE > 20000 |
NOT |
对任何其它布尔运算符的值取反 |
NOT Is BACHELOR |
OR |
将两个条件结合起来,如果两个布尔表达式中的一个为 TRUE,那么就为 TRUE |
SALES > 20000 OR ORDERS > 20000 |
In |
如果操作数等于表达式列表中的一个,那么就为 TRUE |
PROVINCE In ("GUANGDONG") |
Between |
确定一个表达式在某个范围之内,那么就为TRUE。一般与AND同时使用 |
SALES Between 4095 AND 20000 |
Like |
确定给定的字符串完全与指定的模式匹配 |
COUNTRY Like "CANADA" |
其他 |
||
Is NULL |
确定一个表达式是为NULL,主要是文本型字段 |
CONTINENT Is NULL |
Is TRUE |
确定一个表达式为True,主要针对布尔型字段 |
MARRIED Is TRUE |
Is FALSE |
确定一个表达式为False,主要是布尔型字段 |
MARRIED Is FALSE |
聚合函数对一组值执行计算并得到单一的值。除 COUNT 函数之外,聚合函数忽略空值。聚合函数经常与 SELECT 语句的 GROUP BY 子句一同使用。所有聚合函数都具有确定性。任何时候用一组给定的输入值调用它们时,都得到相同的值。除 COUNT() 外,其它聚合函数均不能对文本数据类型使用。在 SuperMap 中聚合函数中的表达式一般采用属性表的字段名,如表 2.2所示:
表 2.2 聚合函数说明列表
聚合函数 |
含义 |
举例 |
Avg |
AVG([ALL|DISTINCT]expression)计算一组中所有ALL(筛选出具有唯一值DISTINCT)记录的〈表达式〉平均值。空值将被忽略。 |
type, Avg (amount) as Average, Count(type) |
Count |
COUNT({[ALL|DISTINCT]expression]|*})返回分组后各组中记录的总数。 |
type,Avg (amount) as Average, Count ( * ) |
Max |
找出一组中所有记录的〈表达式〉最大值。 |
Code, Count ( Code ), Max ( Length ) |
Min |
找出一组中所有记录的〈表达式〉最小值。 |
Code, Count ( Code ), Min ( Length ) |
Sum |
计算一组中所有记录的〈表达式〉总计值。 |
Sales, Customer, Sum ( AMOUNT ) |
Stdev |
给定表达式中所有值的统计标准偏差。 |
Type, Stdev ( expression ) |
Stdevp |
返回给定表达式中所有值的填充统计标准偏差。 |
Type, Stdevp ( expression ) |
Var |
返回给定表达式中所有值的统计方差。 |
Type, Var ( expression ) |
Varp |
返回给定表达式中所有值的填充统计方差。 |
Type, Varp ( expression ) |
数学函数对数字表达式进行数学运算并返回运算结果。数学函数在SuperMap GIS 产品中的表达式一般采用属性表的字段名或字段名构成的表达式,如Cos(Slope)、Ceiling(Pop/Area)等,关于数学函数的说明如表 2.3所示。
表 2.3 数学函数说明列表
数学函数 |
含义 |
举例 |
Abs |
返回给定数字表达式的绝对值。 适用于短整型、长整型、单精度、双精度、货币等类型字段构成的表达式。 |
Abs ( data ) |
Acos |
返回以弧度表示的角度值,该角度值的余弦为给定的float表达式;本函数亦称反余弦。适用于单精度或双精度类型字段构成的表达式,表达式的取值范围从-1到1。 |
Acos ( data ) |
Asin |
返回以弧度表示的角度值,该角度值的正弦为给定的 float 表达式;亦称反正弦。 适用于单精度或双精度类型字段构成的表达式,表达式的取值范围从-1到1。 |
Asin ( data ) |
Atan |
返回以弧度表示的角度值,该角度值的正切为给定的 float 表达式;亦称反正切。 |
Atan ( data ) |
Ceiling |
返回大于或等于所给数字表达式的最小整数。适用于短整型、长整型、单精度、双精度、货币等类型字段构成的表达式。 |
Ceiling( data ) |
Cos |
返回给定表达式中给定角度(以弧度为单位)的三角余弦值。 |
Cos ( angle ) |
Sin |
以近似数字 ( float ) 表达式返回给定角度(以弧度为单位)的三角正弦值。 |
Sin ( Slope ) |
Cot |
返回给定 float 表达式中指定角度(以弧度为单位)的三角余切值。 |
Cot ( angle ) |
Tan |
返回输入表达式的正切值。 |
Tan ( Slope ) |
Degrees |
当给出以弧度为单位的角度时,返回相应的以度数为单位的角度。 |
Degrees ( angle ) |
Exp |
返回所给的 float 表达式的以 e(约等于2.71828182845905)为底的指数值。 |
Exp ( data ) |
Floor |
返回小于或等于所给数字表达式的最大整数。 |
FLOOR ( 123.45 ) , FLOOR ( -123.45 ) , FLOOR ( $123.45 ) |
Log |
返回给定 float 表达式的自然对数。 |
Log ( data ) 或 Ln(data) |
Log10 |
返回给定 float 表达式的以10为底的对数。 |
Log10 ( data ) 或 Log(10,data) |
PI |
返回 PI 的常量值,函数输入为空。 |
PI() * City_R.SMID as test |
Power |
返回给定表达式乘指定次方的值,第一个参数指定数值型字段(或表达式),第二个参数指定次方数。 |
Power(expression,2) as Area |
Radians |
对于在数字表达式中输入的度数值返回弧度值。 |
Radians ( angle ) |
Rand |
返回 0 到1 之间的随机 float 值,函数输入为空。 |
Rand ()* City_R.SMID as test |
Round |
返回指定数值型字段(或表达式)的四舍五入到指定的小数位数的数字。第一个参数指定数值型字段(或表达式),第二个参数指定小数位数。如果没有指定小数位数时,默认四舍五入为最接近的整数。PostgreSQL和DB2不支持指定小数位数的查询。 |
Round (expression,2), Round (expression) |
Sign |
返回给定表达式的正 (+1)、零 (0) 或负 (-1) 号。 |
Sign ( data ) |
Square |
返回给定表达式的平方。 |
Square ( Production ) |
Sqrt |
返回给定表达式的平方根。 |
Sqrt ( Production ) |
CBool |
将一表达式转成 Boolean 值。如果表达式的结果为非零的值,CBool 返回 -1;否则返回 0。 |
CBool(data) |
CDate |
将表达式转成 Date 类型字段。 |
CDate(data) |
CDbl |
将表达式转成 Double类型字段。 |
CDbl(data) |
CInt |
将表达式转成 Integer类型字段。 |
CInt(data) |
CLng |
将表达式转成 Long类型字段。 |
CLng(data) |
CSng |
将表达式转成 Single类型字段。 |
CSng(data) |
CStr |
将表达式转成 String类型字段。 |
CStr(data) |
Fix |
删除 number 的小数部份而返回剩下的整数。如果 number 为负数,则 Fix 则会返回大于或等于 number 的第一个负整数。 |
Fix(data) |
Int |
删除 number 的小数部份而返回剩下的整数。如果 number 为负数,则 Int 返回小于或等于 number 的第一个负整数 |
Int(data) |
字符串函数用于对字符和二进制字符串进行各种操作,它们返回对字符数据进行操作时通常所需要的值。在 SuperMap 的 SQL 查询中,可以直接在结果表包含的文本字段前使用这些函数,如去掉字符前后的空格,可以嵌套使用RTRIM和LTRIM函数,字符串函数说明如表 2.4所示。
表 2.4 字符串函数说明列表
字符串函数 |
含义 |
举例 |
Ascii |
得到字符表达式最左端字符的 ASCII 代码值。 格式:ASCII(character_expression)。character_expression为文本类型字段组成的表达式。 |
Ascii ( Substring (string, position, 1 ) ) |
Char |
将int型表达式的值由ASCII代码转换为字符型的字符串。 格式:Char(integer_expression)。integer_expression为0~255之间整数表达式,如果整数表达式不在此范围内,将返回 NULL 值。 |
Char ( Ascii ( Substring (string, 1, 1 ) ) ) |
InStr |
返回字符串中指定表达式的起始位置。 格式:InSt([start_location],expr1,expr2)。start_location 是在expr1中搜索expr2时的起始字符位置;expr1为一个字符串型表达式,其中包含要寻找的字符;expr2为一个字段串型表达式,标识要搜索的指定序列。起始字符位置不进行设置时,默认从第一个字符开始搜索。 |
InStr(1,Countries.CAPITAL,"京"),InStr(Countries.CAPITAL,"京") |
Left |
返回从字符串左边开始指定个数的字符。 格式:Left(char_expression ,integer_expression)。char_expression 一般为字符型字段;integer_expression是正整数,如果为负,则返回空字符串。 |
Left ( title, 5 ) |
Length |
返回给定字符串表达式的长度(通常为字符个数),其中不包含尾随空格。 格式:Length(string_expression)。string_expression 为要计算的字符串表达式。 |
Length ( CustomName ) |
Lower |
将大写字符数据转换为小写字符数据后返回字符表达式。 格式:Lower(character_expression)。character_expression 是字符类型表达式。 |
Lower ( CustomName ) |
Ltrim |
删除指定字符串表达式的起始空格,返回无起始空格的字符串。 格式:Ltrim(character_expression)。character_expression 是字符类型表达式 |
Ltrim ( string_to_trim ) |
Replace |
用第三个表达式替换第一个字符串表达式中出现的所有第二个给定字符串表达式。 格式:Replace('string_expr1' , 'string_expr2' , 'string_expr3')。string_expr1是待搜索的字符串表达式;string_expr2是待查找的字符串表达式;string_expr3是替换用的字符串表达式。 |
Replace(Countries.CAPITAL,"尔","而") |
Reverse |
返回字符表达式的反转。 格式:Reverse(character_expression)。character_expression 是由字符数据组成的表达式。 |
Reverse ( fname ) |
Right |
返回字符串中从右边开始指定个数的字符。 格式:Right(char_expression ,integer_expression)。char_expression是由字符数据组成的表达式;integer_expression 是起始位置,用正整数表示,如果是负数,则返回一个错误。 |
Right ( fname, 5 ) |
Rtrim |
去除字符型表达式的所有尾随空格,返回无尾随空格的字符串。 格式:Rtrim(character_expression)。character_expression是由字符数据组成的表达式。 |
Rtrim ( sname ) |
Soundex |
返回由四个字符组成的代码 (SOUNDEX) 以评估两个字符串的相似性。 格式:Soundex(character_expression)。character_expression是字符数据的字母数字表达式。 |
Soundex ( word ) |
Space |
返回由重复的空格组成的字符串。 格式:Space(integer_expression)。integer_expression是表示空格个数的正整数,如果为负,则返回空字符串。 |
sname + Space ( 2 ) + fname |
Substr |
返回文本字符表达式的一部分。 格式:Substr(expression, start, length)。expression 是字符串类型的不包含聚合函数的表达式;start 是一个整数,指定子串的开始位置;length是一个整数,指定子串的长度(要返回的字符数或字节数)。 |
Substr ( string, position, 1 ) |
Unicode |
按照 Unicode 标准的定义,返回输入表达式的第一个字符的整数值。 格式:Unicode('ncharacter_expression')。 |
Unicode ( string ) as Unicode |
Upper |
返回将小写字符数据转换为大写的字符表达式。 格式:Upper(character_expression)。character_expression是由字符数据组成的表达式。 |
Upper ( Rtrim ( au_lname ) ) |
日期函数用来显示关于日期的信息。这些函数适用于日期类型字段值,并对这些值执行算术运算。可将日期函数用于可使用表达式的任何地方,时间日期函数说明如表 2.5所示,其中 datepart 的参数设置说明见表 2.6。
表 2.5 时间日期函数说明列表
日期函数 |
含义 |
举例 |
DateAdd |
在给指定日期加上一段时间的基础上,得到新的日期值,适用于日期型字段构成的表达式。 格式:DateAdd(datepart, number, date)。datepart为指定向日期哪一部分返回新值
表 2.6;umber用来增加datepart的值;date为日期型字段构成的表达式。 |
DateAdd ( “m”, 6, StartDate ) as EndDate |
DateDiff |
返回跨两个指定日期的日期和时间边界数。 格式:DateDiff(datepart,startdate,enddate)。datepart指定对日期哪一部分进行差值计算;startdate是开始日期;enddate是终止日期。如果开始日期(如1990年)早于终止日期(如1994年),则结果为正,否则为负。 |
Start, End, DateDiff ( “m”, Start, End ) as
DiffMonth |
DatePart |
返回指定日期的指定部分的整数。 格式:DatePart(datepart,date)。datepart 是指定应返回的日期部分的参数;date为日期型字段构成的表达式。 |
DatePart ( "d", Date ) as Day |
Day |
返回指定日期的天的日期部分的整数,等价于 DatePart(“d”,date)。 格式:Day(date)。date为日期型字段构成的表达式。 |
Day ( Date ) as Day |
GetDate |
按SQL标准格式返回当前系统的日期和时间日期函数。可用在选择浏览字段或用在查询条件子句中,函数输入为空。 |
GetDate ( ) |
GetUtcDate |
返回表示当前 UTC 时间(世界时间坐标或格林尼治标准时间)的日期值。当前的 UTC 时间得自当前的本地时间和运行 SQL Server 的计算机操作系统中的时区设置。函数输入为空。 |
GetUtcDate ( ) |
Month |
返回指定日期月份的整数。等价于 DatePart(“m”, date)。 格式:Month(date)。date 为日期型字段构成的表达式。 |
Month ( Date ) as Month |
Year |
返回指定日期中的年份的整数。等价于 DatePart(“y”, date)。 格式:Year(date)。date 为日期型字段构成的表达式。 |
Year ( Date ) as Year |
表 2.6 datepart参数设置
设置 |
说明 |
yyyy |
年 |
q |
季度 |
m |
月 |
y |
某年的某一天 |
d |
天 |
w |
工作日 |
ww |
周 |
h |
时 |
n |
分 |
s |
秒 |