昨日,工程部的人过来,问我一个问题,有关oracle sql语法转换为mysql语法时,char被设置为0,是什么意思。查找官方文档上解释,摘录如下:
MySQL 允许以 CHAR(0) 类型建立一个列。一些老程序运行时必需一个列,却又并不使用这个列的值,你就不得不为了适应它而建立该列,在这情况下,CHAR(0) 将是很有益的。当需要一个列仅保存两个值时:一个为 CHAR(0)(该列没有定义为 NOT NULL),这将仅占用一个比特位来存储 2 个值:NULL 或 ""。
原mysql代码如下:
CASE
WHEN trim(char(0) from cdrtype) = 'O' AND trim(char(0) from cdrtype) = 'V' AND servicecode NOT LIKE '2%' AND specialtype NOT LIKE '8%' THEN 'XXX'
END
---官方文档对trim函数的解释
TRIM([{BOTH | LEADING | TRAILING} [remstr] FROM] str) TRIM(remstr FROM] str)
Returns the string str
with all remstr
prefixes or suffixes removed. If none of the specifiers BOTH
, LEADING
, or TRAILING
is given,BOTH
is assumed.remstr
is optional and, if not specified, spaces are removed.
mysql>SELECT TRIM(' bar ');
-> 'bar' mysql>SELECT TRIM(LEADING 'x' FROM 'xxxbarxxx');
-> 'barxxx' mysql>SELECT TRIM(BOTH 'x' FROM 'xxxbarxxx');
-> 'bar' mysql>SELECT TRIM(TRAILING 'xyz' FROM 'barxxyz');
-> 'barx'
This function is multi-byte safe.
TRIM([{BOTH | LEADING | TRAILING} [remstr] FROM] str) TRIM(remstr FROM] str) 返回字符串str , 其中所有remstr 前缀和/或后缀都已被删除。若分类符BOTH、LEADIN或TRAILING中没有一个是给定的,则假设为BOTH 。remstr 为可选项,在未指定情况下,可删除空格。
--实验如下:
mysql> select trim(char(0) from ' aac ') from dual; --左边的空格保留输出。。
+-----------------------------+
| trim(char(0) from ' aac ') |
+-----------------------------+
| aac |
+-----------------------------+
1 row in set (0.00 sec)
mysql> select trim(' aac ') from dual; --两边的空格全部截断
+----------------+
| trim(' aac ') |
+----------------+
| aac |
+----------------+
1 row in set (0.00 sec)
感觉有点像伪列,一个小知识点,随笔记存之。。