KSQL 参考手册

1 KSQL 概述
KSQL对金蝶产品实现多数据库支持非常重要。所有与金蝶ERP产品支持的数据库通讯的应用程序都通过向数据库服务器发送KSQL语句来实现通讯,与应用程序的用户界面无关。
KSQL是SQL92的子集。它抽取了SQL92的部分语法来满足金蝶ERP产品的最大功能集合,并随着金蝶ERP产品的发展逐渐丰富和完善。
2 KSQL语法规则
规范 | 用于 |
大写 | KSQL 关键字或文法终结符(在具体语法子句中予以解释) |
小写 | KSQL的语法子句和文法非终结符(在具体语法子句中予以解释) |
斜体 | KSQL 语法中用户提供的参数。 |
| (竖线) | 分隔括号或大括号内的语法项目。只能选择一个项目。 |
[ ] (方括号) | 可选语法项目。不必键入方括号。 |
{}(大括号) | 必选语法项。不要键入大括号。 |
[ ,...n ] | 表示前面的项可重复 n 次。每一项由逗号分隔。 |
[ ...n ] | 表示前面的项可重复 n 次。每一项由空格分隔。 |
加粗 | 数据库名、表名、列名、索引名、存储过程、实用工具、数据类型名以及必须按所显示的原样键入的文本。 |
<标签> ::= | 语法块的名称。此规则用于对可在语句中的多个位置使用的过长语法或语法单元部分进行分组和标记。适合使用语法块的每个位置由括在尖括号内的标签表示:<标签>。 |
除非特别申明,否则所有对数据库对象名的KSQL引用可以是格式如下:
[database_name.] object_name
object_name 引用对象的名称。
当引用某个特定对象时,不必总是为KSQL指定标识该对象的数据库实体名称,也可以直接使用object_name引用某个特定对象,但它要依赖它自己所在的上下文环境。
3 KSQL数据类型
3.1 数据类型预览
数据类型 | 长度 | Sql server | Oracle | Db2 |
CHAR | [1,254] | CHAR[(n)] | CHAR[(n)] | CHAR[(n)] |
VARCHAR | [1,4000] | VARCHAR[(n)] | VARCHAR2(n) | VARCHAR(n) |
NCHAR | [1,2000] | NCHAR[(n)] | NCHAR[(n)] | ? |
NVARCHAR | [1,4000] | NVARCHAR[(n)] | NVARCHAR2(n) | |
BINARY | [1,2000] | BINARY[(n)] | RAW( n ) | VARCHAR(n) FOR BIT DATA |
VARBINARY | [1,8000] | VARBINARY[(n)] | LONG RAW | LONG VARCHAR FOR BIT DATA |
BLOB | [1,2G] | IMAGE | BLOB | BLOB(n) |
CLOB | [1,2G] | TEXT | CLOB | CLOB(n) |
NCLOB | [1,1G] | NTEXT | NCLOB | ? |
INT,INTEGER | [-2^31,2~31-1] | INT | NUMBER(38) | INT |
DECIMAL | [-10^31+1,10^31-1] | |||
DATETIME | DATETIME | DATE | DATE TIME TIMESTAMP |
3.2 数据类型分类
KSQL支持的数据类型为 CHAR, VARCHAR , NCHAR, NVARCHAR, BINARY, VARBINARY, BLOB, CLOB, NCLOB, INT, INTEGER, DECIMAL, DATE, TIME DATETIME
3.3 数据类型层次结构
字符和二进制字符串大对象
CHAR
VARCHAR
CLOB
UNICODE字符和字符串大对象
NCHAR
NVARCHAR
NCLOB
二制数据类型
BINARY
VARBINARY
二进制大对象
BLOB
精确数字
INT
INTEGER
近似数字
DECIMAL
时间数据类型
日期 DATE
时间 TIME
时间戳 DATETIME
3.4 数据类型的优先顺序
当两个不同数据类型的表达式用运算符组合后,数据类型的优先顺序规则确定哪种数据类型要向另一种转换。优先顺序低的数据类型向优先顺序高的数据类型转换。如果此转换不是目标数据库所支持的固有转换,则返回错误。当两个操作数表达式有相同的数据类型时,运算的结果就为那种数据类型。
下面是KSQL数据类型的优先顺序:
CHAR
VARCHAR
NCHAR
NVARCHAR
BINARY
VARBINARY
BLOB
CLOB
NCLOB
DECIMAL
INT
BINARY
VARBINARY
BLOB
CLOB
NCLOB
DECIMAL
INT INTEGER
DATETIME (最高)
3.5 数据类型解释
3.5.1 CHAR
定义固定长度字符数据类型。
语法
CHAR [ ( n ) ]
参数
n
整型值,指定字符数据长度。它可以是1到2000中的值。如没定义,默认值是1。
3.5.2 VARCHAR
定义可变长度字符数据类型
语法
CHAR [ ( n ) ]
参数
n
整型值,指定字符数据长度。它可以是1到2000中的值。如没定义,默认值是1。
3.5.3 NCHAR
固定长度的UNICODE数据的数据类型。
语法
NCHAR [ ( n ) ]
参数
n
整型值,指定字符数据长度。它可以是1到4000中的值。如没定义,默认值是1。
3.5.4 NVARCHAR
可变长度长度的UNICODE数据的数据类型。
语法
参数
NVARCHAR [ ( n ) ]
n
整型值,指定字符数据长度。它可以是1到4000中的值。如没定义,默认值是1。
3.5.5 BINARY
二进制数据类型
语法
BINARY [ ( n ) ]
参数
n
整型值。
3.5.6 BLOB
可变长度二进制数据数据类型。
语法
BLOB [ ( n ) ]
参数
n
整型值,它可以是0到2G之间的值。如没定义,默认值是1。
3.5.7 CLOB
可变长度非 Unicode 数据数据类型。
语法
CLOB [ ( n ) ]
参数
n
整型值,它可以是0到2G之间的值。如没定义,默认值是1。
3.5.8 NCLOB
可变长度 Unicode 数据数据类型。
语法
NCLOB [ ( n ) ]
参数
n
整型值,它可以是0到1G之间的值。如没定义,默认值是1。
3.5.9 INT 和INTEGER
使用整数数据的精确数字数据类型。
语法
{ INT | INTEGER }
参数
注释
INT和INTEGER可表示[-2^31,2~31-1]间的数值。
3.5.10 DECIMAL
带定点精度和小数位数的数值数据类型
语法
DECIMAL [ ( p [ , s ] ) ]
参数
p
精度,指定小数点左边和右边可以存储的十进制数字的最大个数。精度值可以是1到最大精度31之间的值。
S
小数位数,指定小数点右边可以存储的十进制数字的最大个数。小数位数可以是[0,p]中的值。
3.5.11 DATETIME
日期和时间数值数据类型。
语法
参数
4 运算符号
4.1 +(加)
两个数相加。KSQL不允许使用‘+’进行字符串和日期的运算。
语法
expression + expression
参数
expression
是数值类型中任何数据类型的任何有效KSQL表达式。
结果类型
返回优先级较高的参数的数据类型。
示例
SELECT 1 + ABS( 2.0 ) FROM sample
4.2 +(正)
一元运算符,返回数字表达式的正值(一元运算符)。
语法
(+ numeric_expression)
参数
numeric_expression
是数值类型中任何数据类型的任何有效KSQL表达式。
结果类型
返回numeric_expression的类型。
示例
SELECT ( + 1 ) FROM sample
4.3 -(减)
两个数相减。KSQL不允许使用‘-’进行字符串和日期的运算。
语法
expression – expression
参数
expression
是数值类型中任何数据类型的任何有效KSQL表达式。
结果类型
返回优先级较高的参数的数据类型
示例
SELECT ABS(2.0) – 1 FROM sample
4.4 -(负)
一元运算符,返回数字表达式的负值(一元运算符)。
语法
(-numeric_expression)
参数
numeric_expression
是数值类型中任何数据类型的任何有效KSQL表达式。
结果类型
返回numeric_expression的类型。
4.5 *(乘)
两个表达式相乘(算术乘法运算)。
语法
expression * expression
参数
expression
是数值类型中任何数据类型的任何有效KSQL表达式。
结果类型
返回优先级较高的参数的数据类型。
示例
SELECT price * 1.5 AS NewPrice FROM titles
4.6 /(除)
用一个数除以另一个数(算术除法运算符)。
语法
dividend / divisor
参数
dividend
是被除的数字表达式,dividend可以是数值类型中任何数据类型的有效表达式。
Divisor
除数的数字表达式。divisor可以是数值类型中任何数据类型的有效表达式。
结果类型
返回优先级较高的参数的数据类型。如果用一个整型的 divisor 去除整型的 dividend,其结果是一个整数,小数部分被截断。
注释
由 / 运算符返回的实际值是用第一个表达式除以第二个表达式所得的商。
式例
SELECT ((ytd_sales * price) * royalty)/100 AS ‘Royalty Amout’ FROM titles
WHERE type = ‘business’ ORDER BY title_id
4.7 =(等于)
比较两个表达式(比较运算符)。当比较非空表达式时,如果两个操作数相等,则结果为 TRUE;否则结果为FALSE. 如果两个操作数中有一个或者两个都为 NULL,比较结果由目标数据库的环境参数决定。转换取决于数据类型优先级。
语法
expression = expression
参数
expression
可以是数值类型中任何数据类型的有效表达式。两个表达式都必须有可隐式转换的数据类型。转换取决于数据类型优先级。
结果类型
Boolean
4.8 >(大于)
比较两个表达式(比较运算符)。当比较非空表达式时,如果左边操作数的值大于右边的操作数,则结果为 TRUE;否则结果为FALSE。如果两个操作数中有一个或者两个都为 NULL, 比较结果由目标数据库的环境参数设置决定。
语法
expression > expression
参数
expression
可以是数值类型中任何数据类型的有效表达式。两个表达式都必须有可隐式转换的数据类型。转换取决于数据类型优先级。
结果类型
Boolean
4.9 <(小于)
比较两个表达式(比较运算符)。当比较非空表达式时,如果左边操作数的值小于右边的操作数,则结果为 TRUE;否则结果为FALSE。如果两个操作数中有一个或者两个都为 NULL, 比较结果由目标数据库的环境参数设置决定。
语法
expression < expression
参数
expression
可以是数值类型中任何数据类型的有效表达式。两个表达式都必须有可隐式转换的数据类型。转换取决于数据类型优先级。
结果类型
Boolean
4.10 >=(大于或等于)
比较两个表达式(比较运算符)。当比较非空表达式时,如果左边操作数的值大于或等于右边的操作数,则结果为 TRUE;否则结果为FALSE。如果两个操作数中有一个或者两个都为 NULL, 比较结果由目标数据库的环境参数设置决定。
语法
expression > = expression
参数
expression
可以是数值类型中任何数据类型的有效表达式。两个表达式都必须有可隐式转换的数据类型。转换取决于数据类型优先级。
结果类型
Boolean
4.11 <=(小于或等于)
比较两个表达式(比较运算符)。当比较非空表达式时,如果左边操作数的值小于或等于右边的操作数,则结果为 TRUE;否则结果为FALSE。如果两个操作数中有一个或者两个都为 NULL, 比较结果由目标数据库的环境参数设置决定。
语法
expression = < expression
参数
expression
可以是数值类型中任何数据类型的有效表达式。两个表达式都必须有可隐式转换的数据类型。转换取决于数据类型优先级。
结果类型
Boolean
4.12 <>(不等于)
比较两个表达式(比较运算符)。当比较非空表达式时,如果左边操作数的值不等于右边的操作数,则结果为 TRUE;否则结果为FALSE。如果两个操作数中有一个或者两个都为 NULL, 比较结果由目标数据库的环境参数设置决定。
语法
expression < > expression
参数
expression
可以是数值类型中任何数据类型的有效表达式。两个表达式都必须有可隐式转换的数据类型。转换取决于数据类型优先级。
结果类型
Boolean
4.13 !=(不等于)
比较两个表达式(比较运算符)。当比较非空表达式时,如果左边操作数的值不等于右边的操作数,则结果为 TRUE;否则结果为FALSE。如果两个操作数中有一个或者两个都为 NULL, 比较结果由目标数据库的环境参数设置决定。
语法
expression != expression
参数
expression
可以是数值类型中任何数据类型的有效表达式。两个表达式都必须有可隐式转换的数据类型。转换取决于数据类型优先级。
结果类型
Boolean
5 注释
5.1 ――(单行注释)
表示用户提供的文本。可以将注释插入单独行中、嵌套(只限--和//)在 KSQL 命令行的末端,或者KSQL语句中。目标数据库不对注释进行评估。--是SQL92标准的注释符号。
语法
-- text_of_comment
参数
text_of_comment
包含注释文本的字符串
注释
将 -- 用于单行或嵌套的注释。用 -- 插入的注释由换行字符分界。注释没有最大长度限制。
示例
SELECT * FROM authors ORDER BY au_id ASC -- We don't have to specify ASC because that
--is the default.
5.2 //(单行注释)
表示用户提供的文本。可以将注释插入单独行中、嵌套(只限--和//)在 KSQL 命令行的末端,或者KSQL语句中。目标数据库不对注释进行评估。//是KSQL引用了其他高级语言的注释方法。
语法
// text_of_comment
参数
text_of_comment
包含注释文本的字符串。
注释
将 // 用于单行或嵌套的注释。用 // 插入的注释由换行字符分界。注释没有最大长度限制。
示例
SELECT * FROM authors ORDER BY au_id ASC // We don't have to specify ASC because that
//is the default.
5.3 /* */(多行注释)
表示用户提供的文本。可以将注释插入单独行中、嵌套在 KSQL 命令行的末端,或者KSQL语句中。目标数据库不对注释进行评估。
语法
/* text_of_comment*/
参数
text_of_comment
包含注释文本的字符串。
注释
将/* */用于单行的和嵌套的注释。由/* */插入的注释不受换行分界符的限制。
示例
SELECT * FROM authors ORDER BY au_id ASC /* We don't have to specify ASC because that
is the default.*/
6 通配符
6.1 [ ](通配符 — 需匹配的字符)
匹配指定范围内或者属于方括号所指定的集合中的任意单个字符。
6.2 [^](通配符字符 — 无需匹配的字符)
匹配不处于指定范围内或者不属于方括号内指定集合中的任意单个字符。
6.3 _(通配符 — 匹配一个字符)
匹配任意单个字符,并且可以被用作前缀或后缀。
6.4 %(通配符 — 匹配一个或多个字符)
匹配任意单个或多个字符,并且可以被用作前缀或后缀。
7 标识符号
KSQL规定,数据库名,数据库别名,数据表名,数据表别名,字段名,字段别名,视图名,视图别名,索引名,索引别名, 约束名都属于标识符范围。
7.1 命名规则:
7.1.1 一般标识符
以英文字母开头,后跟连续的一个或多个英文字母,下划线或数字。
示例
合法的命名:tTable, t__, t123, tTable__, tTable123, t123__, t__123等。
不合法的命名:_t, _123, 123table, $table, tTable 123等。
7.1.2 引号标识符
包含在双引号内的除双引号以外的连续或不连续字符序列。
示例
合法的命名:”__”, ”123”, ”table 123”等
不合法的命名:””””, “””, “”tTable””等。
7.1.3 临时表表名标识符
以#或##开头的后跟符号一般表示符命名规则的标识符号。
示例
合法的命名:#tTable, ##tTable, #t__, ##t__等。
和合法的命名:#__, #123, ##1_, ##_12等。
8 常量
8.1 时间常量
语法
格式 | 含义 |
{d 'yyyy-mm-dd'} | 日期 |
{t 'hh:mm:ss'} | 时间 |
{ts 'yyyy-mm-dd hh:mm:ss'} | 时间戳 |
注释
时间戳的日期和时间之间只允许出现一个空格分隔符号。
时间中不支持毫秒。
示例
时间戳:{ts‘2002-07-17 10:51:18’}
日期:{d‘2002-07-17’}
时间:{t‘10:51:18’}
8.2 字符串常量
语法
[ N | n ] ‘ [ ^’ ] ’
参数
N
指示该字符歘常量为UNICODE字符串。
n
指示该字符歘常量为UNICODE字符串。
注释
包含在’’中的除’以外的任何字符序列。
示例
合法的字符串常量:‘’, ‘ ‘, ‘ ‘, ‘ ^ ‘, ’hello’等。
合法的UNICODE字符串常量:n‘’, N‘ ‘, N‘ ‘, n‘ ^ ‘, N’hello’等。
不合法的字符串常量:’’’,’’’’’等。
不合法的字符串常量:N’’’,n’’’’’等。
9 函数
9.1 数值函数
9.1.1 ABS
返回给定数字表达式的绝对值。
语法
ABS ( numeric_expression )
参数
numeric_expression
精确数字或近似数字数据类型类别的表达式
返回类型
返回与 numeric_expression 相同的类型。
示例
SELECT ABS(-1.0), ABS(0.0), ABS(1.0)
9.1.2 CELLING
返回大于或等于所给数字表达式的最小整数。
语法
CEILING ( numeric_expression )
参数
numeric_expression
是精确数字或近似数字数据类型类别的表达式
返回类型
返回与 numeric_expression 相同的类型。
示例
SELECT CEILING(123.45), CEILING(-123.45), CEILING(0.0)
9.1.3 COS
一个数学函数,返回给定表达式中给定角度(以弧度为单位)的三角余弦值。
语法
COS ( float_expression )
参数
float_expression
是DECIMAL类型得expression
返回类型
DECIMAL
示例
SELECT CONVERT (VARCHAR,COS(14.78)) FROM sample
9.1.4 EXP
返回所给的 float 表达式的指数值。
语法
EXP ( float_expression )
参数
float_expression
是 DECIMAL类型的表达式。
返回类型
DECIMAL
示例
SELECT CONVERT (VARCHAR,COS(378.615345498)) FROM sample
9.1.5 FLOOR
返回小于或等于所给数字表达式的最大整数。
语法
FLOOR ( numeric_expression )
参数
numeric_expression
精确数字或近似数字数据类型类别的表达式。
返回类型
返回与 numeric_expression 相同的类型。
示例
SELECT FLOOR(123,45), FLOOR(-123.45), FLOOR(123.45) FROM sample
9.1.6 LOG
返回给定 float 表达式的自然对数。
语法
LOG ( float_expression )
参数
float_expression
是DECIMAL数据数据类型的表达式 。
返回类型
DECIMAL
示例
SELECT CONVERT(varchar,LOG(5.175643)) AS “The LOG of the variable is:” FROM sample
9.1.7 PI
返回PI的值。
语法
PI( )
参数
DECIMAL
返回类型
DECIMAL
示例
SELECT PI( ) AS “PI is” FROM sample
9.1.8 SIGN
返回给定表达式的正 (+1)、零 (0) 或负 (-1) 号。
语法
SIGN ( numeric_expression )
参数
numeric_expression
精确数字或近似数字数据类型类别的表达式。
返回类型
DECIMAL
示例
SELECT SIGN( -1),SIGN(10) ,SING(0) FROM sample
9.1.9 SIN
以近似数字 (float) 表达式返回给定角度(以弧度为单位)的三角正弦值。
语法
SIN ( float_expression )
参数
float_expression
是DECIMAL类型得表达式。
返回类型
DECIMAL
示例
SELECT CONVERT(varchar,SIN(45.175643)) AS “The SIN of the angle is: “ FROM sample
9.1.10 SQRT
返回给定表达式的平方根。
语法
SQRT ( float_expression )
参数
float_expression
是 DECIMAL类型的表达式。
返回类型
DECIMAL
示例
SELECT SQRT( 1.0 ) FROM sample
9.1.11 TAN
返回输入表达式的正切值。
语法
TAN ( float_expression )
参数
float_expression
返回类型
float 或 real 类型的表达式,解释为弧度数。
示例
SELECT TAN(PI( ) /2) FROM sample
9.1.12 LOG10
返回给定 float 表达式的以 10 为底的对数。
语法
LOG10 ( float_expression )
参数
float_expression
是 DECIMAL类型的表达式。
返回类型
DECIMAL
示例
SELECT CONVERT(varchar,LOG10(145
KSQL 参考手册
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。



