GBase 8a转换操作符和函数详解
转换操作符和函数
1.BINARY
操作符说明
在字符串前使用 BINARY 操作符,可以区分大小写进行参数值的比较。
示例1:字符串前不使用 BINARY,比较不区分大小写。
gbase> SELECT 'a' = 'A' FROM dual;
+-----------+
| 'a' = 'A' |
+-----------+
| 1 |
+-----------+
1 row in set
示例 2:字符串前使用 BINARY,比较区分大小写。
gbase> SELECT BINARY 'a' = 'A' FROM dual;
+------------------+
| BINARY 'a' = 'A' |
+------------------+
| 0 |
+------------------+
1 row in set
示例 3:字符串前使用 BINARY,对尾空格进行比较。
gbase> SELECT BINARY 'a' = 'a ' FROM dual;
+-------------------+
| BINARY 'a' = 'a ' |
+-------------------+
| 0 |
+-------------------+
1 row in set
2.CAST 和 CONVERT 函数
函数说明
CAST(expr AS type),CONVERT(expr,type),CONVERT(expr USING transcoding_name)
CAST()和 CONVERT()函数可以用于将一个类型的数值转换到另一个类型。
type 可以是下列值之一:
• CHAR、DATE、DATETIME、DECIMAL、TIME、NUMERIC、INT、SIGNED INT、SIGNED。
• CAST()和 CONVERT(...USING...)是标准的 SQL 语法。
• CAST(str AS BINARY)等价于 BINARY str。
• CAST(expr AS CHAR)把表达式看作是默认字符集中的字符串。
注意
使用 CAST()函数改变列类型为 DATE,DATETIME 或 TIME,只是标识此列,
使其变为一个指定的数据类型,而不是改变列的值。
CAST()的最终执行结果将会转化为指定的列类型。
示例 1:将 NOW()转换为 DATE 类型。
gbase> SELECT CAST(NOW() AS DATE) FROM dual;
+---------------------+
| CAST(NOW() AS DATE) |
+---------------------+
| 2020-04-01 |
+---------------------+
1 row in set
示例 2:字符串和数字类型的转换是隐式操作,用户使用时只要把字符串值当做一个数字即可。
gbase> SELECT 1+'1' FROM dual;
+-------+
| 1+'1' |
+-------+
| 2 |
+-------+
1 row in set
示例 3:CAST(str AS BINARY)等价于 BINARY str。
gbase> SELECT CAST('a' AS BINARY) = 'a ' FROM dual;
+----------------------------+
| CAST('a' AS BINARY) = 'a ' |
+----------------------------+
| 0 |
+----------------------------+
1 row in set
3.TO_SINGLE_BYTE
函数说明
to_single_byte(arg)
to_single_byte: 全角转半角的函数名;
arg: to_single_byte 函数的参数,可以为任何类型的值和列。
如果 arg 为字符串,并且字符串里面含有全角的话,在输出结果中就会将全角字符转为半角字符,其他字符保持不变。
该函数仅在 UTF8 字符集和 GBK 字符集下有效。
当前95个字符支持全角转半角。
95 个字符如下:
空格, !, ", #, $, %, &,‘, (, ), *, +,,, -, ., /,
0-9, :, ;, <, =,>,?, @, A-Z, [,\,],^,_,‘,a-z,{, |,},~
create as select 时候,包含函数列的字段类型根据查询结果的字段类型来确
定,如果是查询结果的字段类型为字符类型,会根据结果的最大长度来判断
是 varchar、longblob 类型。
注意
只有 varchar、char、text 支持字符串类型的列类型支持全角字符,并且使用
to_single_byte 转换成功。
Longblob、 blob 虽然能存放全角字符,但是是按二进制存储的,to_single_byte
转换后还是全角字符。
示例:
create table t(a int, b varchar(10), c datetime, t text, e longblob, f blob, g char(10));
gbase> insert into t values(1, 'aaaaaa', '2011-01-01 11:11:11', 'aaaa', 'aaaa', 'aaaa
', 'aaaa');
Query OK, 1 row affected (Elapsed: 00:00:00.05)
gbase> select to_single_byte(a) as sing_a,to_single_byte(b) as sing_b, to_single_byte(c) as sing_c,
to_single_byte(t) as sing_t, to_single_byte(e) as sing_e, to_single_byte(f) as sing_f,
to_single_byte(g) as sing_g from t;
+--------+--------+---------------------+--------+--------------+--------------+------------+
| sing_a | sing_b | sing_c | sing_t | sing_e | sing_f | sing_g |
+--------+--------+---------------------+--------+--------------+--------------+------------+
| 1 | aaaaaa | 2011-01-01 11:11:11 | aaaa | aaaa | aaaa | aaaa |
+--------+--------+---------------------+--------+--------------+--------------+------------+
1 row in set (Elapsed: 00:00:00.03)
gbase> create table ty as select to_single_byte(a) as sing_a,to_single_byte(b) as sing_b,
to_single_byte(c) as sing_c, to_single_byte(t) as sing_t, to_single_byte(e) as sing_e,
to_single_byte(f) as sing_f, to_single_byte(g) as sing_g from t;
Query OK, 1 row affected (Elapsed: 00:00:00.11)
gbase> show create table ty \G
*************************** 1. row ***************************
Table: ty
Create Table: CREATE TABLE "ty" (
"sing_a" varchar(11) DEFAULT NULL,
"sing_b" varchar(10) DEFAULT NULL,
"sing_c" varchar(26) DEFAULT NULL,
"sing_t" varchar(10922) DEFAULT NULL,
"sing_e" longblob,
"sing_f" varbinary(32767) DEFAULT NULL,
"sing_g" varchar(10) DEFAULT NULL
) ENGINE=EXPRESS DEFAULT CHARSET=utf8 TABLESPACE='sys_tablespace'
1 row in set (Elapsed: 00:00:00.00)
热门帖子
- 12025-12-01浏览数:182765
- 22023-05-09浏览数:25067
- 42023-09-25浏览数:18527
- 52020-05-11浏览数:17529