【Oracle】【MySQL】在SQL语句中使用连接符
xixuefeng
MySQL, MySQL-DEV, Oracle, SQL&Function
2017-09-19 15:34:54
2,310 次浏览
Oracle&MySQL'SQL
【Oracle】【MySQL】在SQL语句中使用连接符已关闭评论
在写SQL语句时,多个字符串连接是比较常用的。那么Oracle和MySQL在连接符上有什么区别呢?
Oracle和MySQL使用的字符串连接函数都是concat。
我们列举一个通用的例子,将字符串“I’m”和“18 years old”拼接到一起
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
## Oracle SQL> select concat('I''m ','18 years old') from dual; CONCAT('I''M','18YEARSOLD') --------------------------- I'm 18 years old SQL> ## MySQL mysql> select concat('I''m ','18 years old'); +--------------------------------+ | concat('I''m ','18 years old') | +--------------------------------+ | I'm 18 years old | +--------------------------------+ 1 row in set (0.05 sec) mysql> ## 备注 在字符串中,两个单引号代表一个单引号 |
从上面的例子看,在函数的使用上没有什么区别,真的没有区别吗?显然不是。上述例子我们会发现I’m后面有个空格,默认情况下两个字符串是连接到一起的,所以需要手工加个空格。假如我们把空格当成一个字符串看待的话,也就是三个字符串连接到一起。分别是“I’m”,“ ”,“18 years old”那么该怎么写呢?
MySQL:字符串与字符串之间用逗号隔开,非常的合理且好理解。
|
1 2 3 4 5 6 7 8 9 |
mysql> select concat('I''m',' ','18 years old'); +-----------------------------------+ | concat('I''m',' ','18 years old') | +-----------------------------------+ | I'm 18 years old | +-----------------------------------+ 1 row in set (0.06 sec) mysql> |
Oracle呢?
|
1 2 3 4 5 |
SQL> select concat('I''m',' ','18 years old') from dual; select concat('I''m',' ','18 years old') from dual ORA-00909: 参数个数无效 SQL> |
显然是报错了,原因是在Oracle中,concat函数只支持两个参数,是不是比较low,没错,这个函数在Oracle里使用率非常的低。
Oracle作为关系型数据库的老大,怎么可能这么low显然有更方便且好用的办法,那就是“||”,这个是不限制字符串的个数的(所谓不限制,也不能玩命的拼接,当超出SQL的长度时也是会有问题的。作者本人没测试过,呵呵)
Oracle利用||拼接“I’m”,“ ”,“18 years old”这三个字符串:
|
1 2 3 4 5 6 |
SQL> select 'I''m'||' '||'18 years old' from dual; 'I''M'||''||'18YEARSOLD' ------------------------ I'm 18 years old SQL> |
小结:
1:Oracle和MySQL在做字符串连接时提供的函数均为concat,但是他们还是有很大的区别的,区别在于,Oracle只支持两个参数,而MySQL可以支持多个。
2:单引号在字符串中的表现方式:两个单引号表示一个单引号。
3:单引号也可以使用ASCII来表示,如下:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
## Oracle SQL> select 'I'||chr(39)||'m'||' '||'18 years old' from dual; 'I'||CHR(39)||'M'||''||'18YEAR ------------------------------ I'm 18 years old SQL> ## MySQL mysql> select concat('I',char(39),'m',' ','18 years old'); +---------------------------------------------+ | concat('I',char(39),'m',' ','18 years old') | +---------------------------------------------+ | I'm 18 years old | +---------------------------------------------+ 1 row in set (0.04 sec) mysql> |
4:当然,MySQL中解决单引号还有很多方式
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
mysql> select concat("I'm",' ','18 years old'); +----------------------------------+ | concat("I'm",' ','18 years old') | +----------------------------------+ | I'm 18 years old | +----------------------------------+ 1 row in set (0.04 sec) mysql> select concat('I\'m',' ','18 years old'); +-----------------------------------+ | concat('I\'m',' ','18 years old') | +-----------------------------------+ | I'm 18 years old | +-----------------------------------+ 1 row in set (0.04 sec) mysql> |