SAPHANA学习(1):SAPHANASQLReference 3.SAP HANA SQL Reference
3.1注释
/*1.注释*/
--单⾏注释
/*多⾏注释*/
3.2标志符
/*2.标识符*/
/*
⽤来定义table name,column name,index name,function name,procedure name等
1.使⽤双引号括起来的标志符可以是任何字符
2.⾮使⽤双引号括起来的标志符,只能有字母开头,数字和下划线组成
注意:⾮双引号括起来的标志符,sql解析时,服务器会转换为⼤写
*/
3.3⽤户名
/*3.⽤户名*/
/*
⽤户名可以包含下划线和连接符,不使⽤双引号括起来;
密码最⼩长度为8;
*/
3.4引号
/*4.引号*/
/*
单引号表⽰分隔字符串;
单引号本⾝使⽤''两个单引号表⽰;
双引号表⽰标志符;
双引号本⾝使⽤""两个双引号表⽰;
*/
3.5⽂件语句语法表⽰符号
/*5.语句、语法表⽰符号*/
/*
<> :sql语法成分;
::= :运算符,右边表⽰左边元素;
[] : 表⽰可选部分;
{} :表⽰组元素,可以重复0次或多次;
| :表⽰公式两部份,任选⼀个;
[……]:表⽰前⾯元素可选重复;
!! :表⽰普通⽂本
<digit> ::= 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0
<letter> :: = a | b | …… | z | A | …… | Z
*/
3.6数据类型
/*6.数据类型*/
/*
Datetime types DATE, TIME, SECONDDATE, TIMESTAMP
Numeric types TINYINT, SMALLINT, INTEGER, BIGINT, SMALLDECIMAL, DECIMAL, REAL, DOUBLE
Boolean type BOOLEAN
Character string types VARCHAR, NVARCHAR, ALPHANUM, SHORTTEXT
Binary types VARBINARY
Large Object types BLOB, CLOB, NCLOB, TEXT
Multi-valued types ARRAY
Spatial types ST_GEOMETRY, ST_POINT
常数,固定值,使⽤单引号包起来,‘100’;
Unicode字符串,前⾯加⼤写N表⽰,例如:N'abc';
⼆进制类型使⽤varbinary类型存储;
当size⼩于等于8192可以使⽤(N)VARCHAR保存
varbinary(<n>)存储以字节为单位,<n>表⽰最⼤长度1-5000,默认为1;
布尔数据类型保存布尔类型数据;
数据值:TRUE,FALSE,UNKNOWN(同义NULL)
当系统不⽀持boolean类型,TRUE = 1,FALSE = 0;
字符串数据类型
varchar:7位ASCII字符串;
nvarchar:⽤于存储unicode字符串;
字符串不⽀持排序规则表达式,字符串⽐较是使⽤对应⼆进制⽐较;
定义
varchar(<n>):<n>指定字符串长度1-5000,不指定默认1;
sql 字符串转数组
nvarchar(<n>):
alphanum:包含字母数字的可变长字符串,字符串长度1-127,可以进⾏排序
对于纯数字,可以看做前导0的字母;
shorttext:可变长字符串,⽀持⽂本搜索,字符串搜索;
⽀持column table,不⽀持row table;
3.6.1数据类型转换
SAP HANA⽀持显式或隐式数据类型转换;
function:
● CAST function
● TO_ALPHANUM function
● TO_BIGINT function
● TO_VARBINARY function
● TO_BLOB function
● TO_CLOB function
● TO_DATE function
● TO_DATS function
● TO_DECIMAL function
● TO_DOUBLE function
● TO_INTEGER function
● TO_INT function
● TO_NCLOB function
● TO_NVARCHAR function
● TO_REAL function
● TO_SECONDDATE function
● TO_SMALLINT function
● TO_TINYINT function
● TO_TIME function
● TO_TIMESTAMP function
● TO_VARCHAR function
time -> timestamp 显式转换to_timestamp or cast function;
3.6.2数据类型优先级
优先级低的类型数据⽐较计算时,会隐式转换成较⾼优先级数据;
● TIMESTAMP
● SECONDDATE
● DATE
● TIME
● DOUBLE
● REAL
● DECIMAL
● SMALLDECIMAL
● DECIMAL(<precision>, <scale>)
● BIGINT
● INTEGER
● SMALLINT
● TINYINT
● NCLOB
● NVARCHAR
● CLOB
● VARCHAR
● BLOB
● VARBINARY
数据转换报错
1.DECEMAL TO BIGINT
DECEMAL 111.324
BIGINT 111
报错:Overflow error
2.VARCHAR TO BIGINT
VARCHAR '12.3332'
BIGINT 12
报错:invalid number
VARCHAR TO TINYINT
VARCHAR '256'
TINYINT 256
报错:Overflow error
*/
⽰例:
-- string
select'100' "str1", 'hello' "str2",N'aba' "unicode str3" from dummy;
--number
select1 "int1", 1.234 "decimals1", 1.23e2 "decimals2", 0xabcdef "Hex Decimals" from dummy; --binary string
select X'2112' "binary string", x'abdd' "binary string2" from dummy;
--date,time,timestamp
select date'2011-11-01' "⽇期", time'12:22:33.22' "时间" , timestamp'2011-02-22 22:22:33' "时间戳" from dummy; --test boolean
--创建⾏存储⽅式table
CREATE ROW TABLE TEST (A BOOLEAN);
--查询显⽰True 1,False 0
INSERT INTO TEST VALUES (TRUE);
INSERT INTO TEST VALUES (FALSE);
--查询语句显⽰??
INSERT INTO TEST VALUES (UNKNOWN);
INSERT INTO TEST VALUES (NULL);
SELECT A "boolean值" FROM TEST;
SELECT A "boolean值" FROM TEST WHERE A = TRUE;
--错误语法
--SELECT * FROM DUMMY WHERE ( 'A'>'B' ) = ( 'C'>'D' );
--同样实现
SELECT*FROM DUMMY WHERE
CASE WHEN ( 'A'>'B' ) THEN TRUE WHEN NOT ( 'A'>'B' ) THEN FALSE ELSE NULL END
=CASE WHEN ( 'C'>'D' ) THEN TRUE WHEN NOT ( 'C'>'D' ) THEN FALSE ELSE NULL END;
--满⾜条件
SELECT*FROM dummy WHERE TRUE = TRUE ;
--不满⾜条件
SELECT*FROM dummy WHERE TRUE = FALSE ;
--创建表
CREATE ROW TABLE INT_NUM(
number TINYINT,
number1 SMALLINT,
number2 INTEGER,
number3 BIGINT,
number4 DECIMAL,
number5 SMALLDECIMAL,
number6 REAL,
number7 DOUBLE);
--插⼊数据
INSERT INTO INT_NUM VALUES (1,1,1,1,1.31333,1.32,1.33,1.34);
SELECT*from INT_NUM;
3.6.3⽇期数据类型
/*
--⽇期数据类型
DATE:默认格式YYYY-MM-DD,范围0001-01-01 ~ 9999-12-31
TO_DATE()⽅法
YYYY/MM/DD
YYYY/MM-DD
YYYY-MM/DD
YYYYMMDD
MON:⽉份英⽂简写,⽰例:JAN.
MONTH:⽉份英⽂,⽰例:JANUARY.
RM:罗马数字表⽰⽉份,I-XII,⽰例:⼀⽉:I;
DDD:⼀年的第⼏天1-366,
TIME:默认HH24-MI-SS,HH24:⼩时0-23;MI:分钟0-59;SS:秒0-59;
TO_TIME()⽅法
HH:MI[:SS][AM][PM]:
HH12:MI[:SS][AM][PM]:12⼩时进制
HH24:MI[:SS]:
SSSSS:秒,0-86399;
SECONDDATE:默认格式YYYY-MM-DD HH24-MI-SS;
TIMESTAMP:默认格式YYYY-MM-DD HH24-MI-SS.FF7.FF<n>:代表n⼩数字数
TO_TIMESTAMP()⽅法
--将字符串VARCHAR转换为⽇期,对应format格式
TO_VARCHAR()⽅法
D:周天,1-7;
DAY:周天,英⽂,⽰例:星期⼀,MONDAY;
DY:周天,英⽂简写,⽰例:星期⼀,MON;
MON:⽉份英⽂简写,⽰例:JAN;
MONTH:⽉份英⽂全称;
RM:罗马数字符号表⽰⽉;
Q:季度1-4;
W:⼀个⽉第⼏周1-6;
WW:⼀年的第⼏个⽉1-54;
*/
--设置时间格式,⽇期格式
CREATE TABLE TEST_DATE(date1 DATE,date2 TIME,date3 TIMESTAMP,date4 SECONDDATE);
--> OK
INSERT INTO TEST_DATE VALUES ('2020-02-03','02:33:33','2018/01/02 10:00:00','2020-02-23 22:33:33');    --> ERROR,时间戳格式错误
--INSERT INTO TEST_DATE VALUES ('2020-02-03','02:33:33','02/01/2018 10:00:00','2020-02-03 22:33:33'); -->查询显⽰,时间戳转换为varchar
SELECT TO_VARCHAR(date3) FROM TEST_DATE;
-->设置format格式
SELECT TO_VARCHAR(date3,'⽉:MON-MONTH;天:DAY-D-DY;第Q季;第WW⽉;第W周') FROM TEST_DATE; -->设置默认DATE格式
--SET 'DATE_FORMAT' = 'YYYY/MM/DD';
-->设置默认TIME格式
--SET 'TIME_FORMAT' = 'HH:MI:SS';
-->设置SECONDDATE格式
-
-SET 'SECONDDATE_FORMAT' = 'DD/MM/YYYY HH:MI:SS';
-->删除TABLE语句
DROP TABLE TEST_DATE1;
CREATE TABLE TEST_DATE1(date1 DATE,date2 TIME,date3 TIMESTAMP,date4 SECONDDATE);
-->设置默认时间戳格式
SET'TIMESTAMP_FORMAT'='DD/MM/YYYY HH:MI:SS';
--> ERROR,时间戳格式错误
--INSERT INTO TEST_DATE VALUES ('2020-02-03','02:33:33','2018/01/02 10:00:00','2020-02-03 22:33:33');    --> OK,需要按照事件戳格式设置值 (并不OK,报错?)
INSERT INTO TEST_DATE1 VALUES ('2020-02-03','02:33:33','02/01/2018 10:00:00','2020-02-03 22:33:33'); --> 02/01/2018 10:00:00
SELECT TO_VARCHAR(date3) FROM TEST_DATE1;
/*DATE空类型
设置值为'','0000-00-00',NULL,查询显⽰为'?';
*/
CREATE ROW TABLE TEST_DATE2 (A INT, B DATE, C DATE);
INSERT INTO TEST_DATE2 VALUES (1, '', '0001-01-01');
INSERT INTO TEST_DATE2 VALUES (2, '0000-00-00', '0001-01-01');
INSERT INTO TEST_DATE2 VALUES (3, '0000-00-00', '0001-01-01');
INSERT INTO TEST_DATE2 VALUES (4, '0001-01-01', '0001-01-01');
INSERT INTO TEST_DATE2 VALUES (5, NULL, '0001-01-01');
INSERT INTO TEST_DATE2 VALUES (6, '0001-01-01', '0001-02-01');

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。