SAPHanasql语法1      约束
1.1        注释
1.2        标识符
1.3        单引号
1.4        双引号
1.5        SQL 保留字
2      数据类型
2.1        ⽇期时间类型
2.1.1        DATE(⽇期)
2.1.2        TIME(时间)
2.1.3        SECONDDATE(⽇期+时间)
2.1.4        TIMESTAMP(时戳)
2.2        数字类型
2.2.1        TINYINT
2.2.2        SMALLINT
2.2.3        INTEGER
2.2.4        BIGINT
2.2.5        DECIMAL(精度,⼩数位数)或 DEC( p, s)
2.2.6        SMALLDECIMAL
2.2.7        REAL
2.2.8        DOUBLE
2.2.9        FLOAT( n )
2.3        字符类型
2.3.1        VARCHAR
2.3.2        NVARCHAR
2.3.3        ALPHANUM
2.3.4        SHORTTEXT
2.4        ⼆进制类型
2.4.1        VARBINARY
2.5        ⼤对象( LOB)类型
2.5.1        BLOB
2.5.2        CLOB
2.5.3        NCLOB
2.5.4        TEXT
2.6        SQL 数据类型和列存储数据类型之间的映射
2.7        数据类型转换
2.7.1        显式类型转换
2.7.2        隐式类型转换
2.7.3        转换规则表
2.7.4        类型转换优先级
2.8        类型常量
2.8.1        字符串常量
2.8.2        数字常量
2.8.3        ⼗六进制数字常量
2.8.4        ⼆进制字符串常量
2.8.5        ⽇期、时间、时间戳常量
3      谓词
3.1        ⽐较谓词
3.2        BETWEEN谓词
3.3        In 谓词
3.4        Exists 谓词
3.5        Like 谓词
3.6        NULL 谓词
3.7        CONTAINS 谓词
4      操作符
4.1        ⼀元和⼆元操作符
4.2        操作符优先级
4.3        算术操作符
4.4        字符串操作符
4.5        ⽐较操作符
4.6        逻辑操作符
4.7        合并操作符
5      表达式
5.1        Case 表达式
5.2        Function 表达式
5.3        Aggregate 表达式
5.4        表达式中的⼦查询
6      SQL 函数
6.1        数据类型转换函数
6.1.1        CAST
6.1.2        TO_ALPHANUM
6.1.3        TO_BIGINT
6.1.4        TO_BINARY
6.1.5        TO_BLOB
6.1.6        TO_CHAR
6.1.7        TO_CLOB
6.1.8        TO_DATE
6.1.9        TO_DATS
6.1.10      TO_DECIMAL
6.1.11      TO_DOUBLE
6.1.12      TO_INT
6.1.13      TO_INTEGER
6.1.14      TO_NCHAR
6.1.16      TO_NVARCHAR
6.1.17      TO_REAL
6.1.18      TO_SECONDDATE
6.1.19      TO_SMALLDECIMAL
6.1.20      TO_SMALLINT
6.1.21      TO_TIME
6.1.22      TO_TIMESTAMP
6.1.23      TO_TINYINT
6.1.24      TO_VARCHAR
6.2        ⽇期时间函数
6.2.1        ADD_DAYS
6.2.2        ADD_MONTHS
6.2.3        ADD_SECONDS
6.2.4        ADD_YEARS
6.2.5        CURRENT_DATE
6.2.6        CURRENT_TIME
6.2.7        CURRENT_TIMESTAMP
6.2.8        CURRECT_UTCDATE
6.2.9        CURRENT_UTCTIME
6.2.10      CURRENT_UTCTIMESTAMP 6.2.11      DAYNAME
6.2.12      DAYOFMONTH
6.2.13      DAYOFYEAR
6.2.14      DAYS_BETWEEN
6.2.15      EXTRACT
6.2.16      HOUR
6.2.17      ISOWEEK
6.2.18      LAST_DAY
6.2.19      LOCALTOUTC
6.2.20      MINUTE
6.2.21      MONTH
6.2.22      MONTHNAME
6.2.23      NEXT_DAY
6.2.24      NOW
6.2.25      QUARTER
6.2.26      SECOND
6.2.27      SECONDS_BETWEEN
6.2.28      UTCTOLOCAL
6.2.29      WEEK
6.2.30      WEEKDAY
6.2.31      YEAR
6.3        数字函数
6.3.1        ABS
6.3.2        ACOS
6.3.3        ASIN
6.3.4        ATAN
6.3.5        ATAN2
6.3.6        BINTOHEX
6.3.7        BITAND
6.3.8        CEIL
6.3.9        COS
6.3.10      COSH
6.3.11      COT
6.3.12      EXP
6.3.13      FLOOR
6.3.14      GREATEST
6.3.15      HEXTOBIN
6.3.16      LEAST
6.3.17      LN
6.3.18      LOG
6.3.19      MOD
6.3.20      POWER
6.3.21      ROUND
6.3.22      SIGN
6.3.23      SIN
6.3.24      SINH
6.3.25      SQRT
6.3.26      TAN
6.3.27      TANH
6.3.28      UMINUS
6.4        字符串函数
6.4.1        ASCII
6.4.2        CHAR
6.4.3        CONCAT
6.4.4        LCASE
6.4.5        LEFT
6.4.6        LENGTH
6.4.7        LOCATE
6.4.8        LOWER
6.4.9        LPAD
6.4.10      LTRIM
6.4.11      NCHAR
6.4.12      REPLACE
6.4.13      RIGHT
6.4.14      RPAD
6.4.15      RTRIM
6.4.16      SUBSTR_AFTER
6.4.17      SUBSTR_BEFORE
6.4.19      TRIM
6.4.20      UCASE
6.4.21      UNICODE
6.4.22      UPPER
6.5        杂项函数
6.5.1        COALESCE
6.5.2        CURRENT_CONNECTION
6.5.3        CURRENCT_SCHEMA
6.5.4        CURRENT_USER
6.5.5        GROUPING_ID
6.5.6        IFNULL
6.5.7        MAP
6.5.8        NULLIF
6.5.9        SESSION_CONTEXT
6.5.10      SESSION_USER
6.5.11      SYSUUID
drop table if exists user7      SQL 语句
7.1        数据定义语句
7.1.1        ALTER AUDIT POLICY
7.1.2        ALTER FULLTEXT INDEX
7.1.3        ALTER INDEX
7.1.4        ALTER SEQUENCE
7.1.5        ALTER TABLE
7.1.6        CREATE AUDIT POLICY
7.1.7        CREATE FULLTEXT INDEX
7.1.8        CREATE INDEX
7.1.9        CREATE SCHEMA
7.1.10      CREATE SEQUENCE
7.1.11      CREATE SYNONYM
7.1.12      CREATE TABLE
7.1.13      CREATE TRIGGER
7.1.14      CREATE VIEW
7.1.15      DROP AUDIT POLICY
7.1.16      DROP FULLTEXT INDEX
7.1.17      DROP INDEX
7.1.18      DROP SCHEMA
7.1.19      DROP SEQUENCE
7.1.20      DROP SYNONYM
7.1.21      DROP TABLE
7.1.22      DROP TRIGGER
7.1.23      DROP VIEW
7.1.24      RENAME COLUMN
7.1.25      RENAME INDEX
7.1.26      RENAME TABLE
7.1.27      ALTER TABLE ALTER TYPE
7.1.28      TRUNCATE TABLE
7.2        数据操纵语句
7.2.1        DELETE
7.2.2        EXPLAIN PLAN
7.2.3        INSERT
7.2.4        LOAD
7.2.5        MERGE DELTA
7.2.6        REPLACE | UPSERT
7.2.7        SELECT
7.2.8        UNLOAD
7.2.9        UPDATE
7.3        系统管理语句
7.3.1        SET SYSTEM LICENSE
7.3.2        ALTER SYSTEM ALTER CONFIGURATION 7.3.3        ALTER SYSTEM ALTER SESSION SET
7.3.4        ALTER SYSTEM ALTER SESSION UNSET
7.3.5        ALTER SYSTEM CANCEL [WORK IN] SESSION 7.3.6        ALTER SYSTEM CLEAR SQL PLAN CACHE 7.3.7        ALTER SYSTEM CLEAR TRACES
7.3.8        ALTER SYSTEM DISCONNECT SESSION
7.3.9        ALTER SYSTEM LOGGING
7.3.10      ALTER SYSTEM RECLAIM DATAVOLUME 7.3.11      ALTER SYSTEM RECLAIM LOG
7.3.12      ALTER SYSTEM RECLAIM VERSION SPACE 7.3.13      ALTER SYSTEM RECONFIGURE SERVICE 7.3.14      ALTER SYSTEM REMOVE TRACES
7.3.15      ALTER SYSTEM RESET MONITORING VIEW 7.3.16      ALTER SYSTEM SAVE PERFTRACE
7.3.17      ALTER SYSTEM SAVEPOINT
7.3.18      ALTER SYSTEM START PERFTRACE
7.3.19      ALTER SYSTEM STOP PERFTRACE
7.3.20      ALTER SYSTEM STOP SERVICE
7.3.21      UNSET SYSTEM LICENSE ALL
7.4        会话管理语句
7.4.1        CONNECT
7.4.2        SET HISTORY SESSION
7.4.3        SET SCHEMA
7.4.4        SET [SESSION]
7.4.5        UNSET [SESSION]
7.5        事务管理语句
7.5.1        COMMIT
7.5.2        LOCK TABLE
7.5.3        ROLLBACK
7.5.4        SET TRANSACTION
7.6        访问控制语句
7.6.1        ALTER SAML PROVIDER
7.6.2        ALTER USER
7.6.3        CREATE ROLE
7.6.4        CREATE SAML PROVIDER
7.6.5        CREATE USER
7.6.6        DROP ROLE
7.6.7        DROP SAML PROVIDER
7.6.8        DROP USER
7.6.9        GRANT
7.6.10      REVOKE
7.7        数据导⼊导出语句
7.7.1        EXPORT
7.7.2        IMPORT
7.7.3        IMPORT FROM
1约束
1.1注释
你可以给你的 SQL 语句添加注释来增加可读性和可维护性。 SQL 语句中注释的分隔如下:
l  双连字符“--”。所有在双连字符之后直到⾏尾的内容都被 SQL 解析器认为是注释。
l  “/*”和“*/”。这种类型的注释⽤来注释多⾏内容。所有在引号符“/*”和关闭符“*/”之间的⽂字都会被 SQL 解析器忽略。
1.2标识符
标识符⽤来表⽰ SQL 语句中的名字,包括表名、视图名、同义字、列名、索引名、函数名、存储过程名、⽤户名、⾓⾊名等等。有两种类型的标识符:未分隔标识符和分隔标识符(指⽤空间分开字符串)。
l  未分隔的表名和列名必须以字母开头,不能包含除数字或者下划线以外的符号。
l  分隔标识符⽤分隔符、双引号关闭,然后标识符可以包含任何字符包括特殊字符。例如,"AB$%CD" 是⼀个有效的标识符。
l  限制:
o "_SYS_"专门为数据库引擎保留,因此不允许出现在集合对象的名字开头。
o ⾓⾊名和⽤户名必须以未分隔符指定。
o 标识符最⼤长度为 127 字母。
1.3单引号
单引号是⽤来分隔字符串,使⽤两个单引号就可以代表单引号本⾝。
1.4双引号
⽤双引号分隔标识符,使⽤两个双引号可以代表双引号本⾝。
1.5SQL 保留字
保留字对于 SAP HANA 数据库的 SQL 解析器有着特殊含义,不能成为⽤户⾃定义的名字。保留字不能在 SQL 语句中使⽤为集合对象名。如果有必要,你可以使⽤双引号限定表或列名绕过这个限制。
下表列出了所有现在和未来 SAP HANA 数据库的保留字:
2                            数据类型
2.1⽇期时间类型
2.1.1    DATE(⽇期)
DATE 数据类型由年、⽉、⽇信息组成,表⽰⼀个⽇期值。 DATA 类型的默认格式为‘YYYY-MM-DD’。 YYYY 表⽰年, MM 表⽰⽉⽽ DD 表⽰⽇。时间值的范围从 0001-01-01 ⾄ 9999-12-31。
select to_date('365','DDD') from dummy;
select to_date('2015/365','YYYY/ddd') from dummy;
select to_date('2015-january','YYYY-month') from dummy;
select to_date('2015-February/28','yyyy-moNth/dd') from dummy;
select to_date('2015-Jan/31','yyyy-mon/dd') from dummy;
select to_date('2015/2-1','yyyy/mM-dd') from dummy;
select to_date('2015/02-01','yyyy/mM-dd') from dummy;
select to_date('2015+02=01','yyyy+mM=dd') from dummy;
select to_date('20150201','yyyymmdd') from dummy;
2.1.2    TIME(时间)
TIME 数据类型由⼩时、分钟、秒信息组成,表⽰⼀个时间值。 TIME 类型的默认格式为‘HH24:MI:SS’。
HH24 表⽰从 0 ⾄ 24 的⼩时数, MI 代表 0 ⾄ 59 的分钟值⽽ SS 表⽰ 0 ⾄ 59的秒。
select to_time('1:1:1 PM','HH:MI:SS PM') from dummy;
select to_time('1:1:1','HH:MI:SS') from dummy;
select to_time('1:1:1','HH24:MI:SS') from dummy;
2.1.3      SECONDDATE(⽇期+时间)
SECONDDATE 数据类型由年、⽉、⽇、⼩时、分钟和秒来表⽰⼀个⽇期和时间值。
SECONDDATE 类型的默认格式为‘YYYY-MM-DD HH24:MI:SS’。 YYYY 代表年, MM 代表⽉份,DD 代表⽇, HH24 表⽰⼩时, MI 表⽰分钟, SS 表⽰秒。⽇期值的范围从 0001-01-
01 00:00:01 ⾄ 9999-12-31 24:00:00。
2.1.4      TIMESTAMP(时戳)
TIMESTAMP 数据类型由⽇期和时间信息组成时戳。默认格式为‘YYYY-MM-DD HH24:MI:SS.FF7’。 FFn 代表含有⼩数的秒,其中 n 表⽰⼩数部分的数字位数。时间戳的范围从 0001-01-01 00:00:00.0000
000 ⾄ 9999-12-31 23:59:59.9999999。
select to_timestamp('2015/1/2 1:1:1','YYYY/MM/DD HH:MI:SS') from dummy;
select to_timestamp('2015/1/2 1:1:1.999','YYYY/MM/DD HH:MI:SS.FF3') from dummy;
select to_timestamp('2015/1/2 1:1:1.9999999','YYYY/MM/DD HH:MI:SS.FF7') from dummy;
selectcurrent_timestampfrom dummy;--2015-6-12 16:50:26.349
select to_char(current_timestamp,'D') from dummy;--5    注:这个应该是星期⼏
select to_char(current_timestamp,'DD') from dummy;--12
select to_char(current_timestamp,'DDD') from dummy;--163
select to_char(current_timestamp,'Day') from dummy;--Friday
select to_char(current_timestamp,'Dy') from dummy;--Fri
select to_char(current_timestamp,'mon') from dummy;--jun
select to_char(current_timestamp,'month') from dummy;--june
select to_char(current_timestamp,'rm') from dummy;--vi
select to_char(current_timestamp,'q') from dummy;--2
select to_char(current_timestamp,'w') from dummy;--2
select to_char(current_timestamp,'ww') from dummy;--24
select to_char(current_timestamp,'FF7') from dummy;--1260000
select to_char(current_timestamp,'YY') from dummy;--15
2.2数字类型
2.2.1    TINYINT
TINYINT 数据类型存储⼀个 8 位(1个字节)⽆符号整数。 TINYINT 的最⼩值是 0,最⼤值是 255。
2.2.2    SMALLINT
SMALLINT 数据类型存储⼀个 16 (2个字节)位⽆符号整数。 SMALLINT 的最⼩值为-32,768 ,最⼤值为32, 767。
2.2.3    INTEGER
INTEGER 数据类型存储⼀个 32 (4个字节)位有符号整数。 INTEGER 的最⼩值为-2,147,483,648 ,最⼤值为 2,147,483,647。
2.2.4    BIGINT
BIGINT 数据类型存储⼀个 64 (8个字节)位有符号整数。 INTEGER 的最⼩值为-9,223,372,036,854,775,808,最⼤值为 9, 223,372,036,854,775,807。
2.2.5    DECIMAL(精度,⼩数位数)或 DEC( p, s)
DECIMAL (p, s) 数据类型指定了⼀个精度为 p ⼩数位数为 s 的定点⼩数。精度是有效位数的总数,范围从 1 ⾄ 34。
⼩数位数是从⼩数点到最⼩有效数字的数字个数,范围从-6,111 到 6,176,这表⽰位数指定了⼗进制⼩数的指数范围从 10-6111 ⾄ 106176。如果没有指定⼩数位数,则默认值为 0。
当数字的有效数字在⼩数点的右侧(后⾯)时,⼩数位数为正;有效数字在⼩数点左侧(前⾯)时,⼩数位数为负。
例⼦:
0.0000001234 (1234 x 10-10) 精度为 4,⼩数位数 10。
1.0000001234(10000001234 x 10-10) 精度为 11,⼩数位数为 10。
1234000000 (1234x106) 精度为 4,⼩数位数为-6。
当未指定精度和⼩数位数, DECIMAL 成为浮点⼩数。这种情况下,精度和⼩数位数可以在上⽂描述的范围内不同,根据存储的数值, 1-34 的精度和 6111-6176 的⼩数位数。
2.2.6    SMALLDECIMAL
SMALLDECIMAL 是⼀个浮点⼗进制数。精度和⼩数位数可以在范围有所不同,根据存储的数值, 1-16 的精度以及-369-368的⼩数位数。 SMALLDECIMAL 只⽀持列式存储。DECIMAL 和 SMALLDECIMAL 都是浮点⼗进制数。举例来说,⼀个⼗进制列可以存储 3.14,3.1415, 3.141592 同时保持它们的精度。
DECIMAL(p, s) 是 SQL 对于定点⼗进制数的标准标记。例如, 3.14, 3.1415,3.141592 存储在 decimal(5, 4)列中为 3.1400, 3.1415, 3.1416,各⾃保持其精度( 5)和⼩数位数( 4)。
2.2.7    REAL
REAL 数据类型定义⼀个 32 位(4个字节)单精度浮点数。
2.2.8    DOUBLE
DOUBLE 数据类型定义⼀个 64 位(8个字节)的双精度浮点数,最⼩值为-1.79769 x 10308,最⼤值为