Oracle中串连接符||的使用心得(个人见解)

    Oracle中可以用串连接符||将若干个串连在一起(Oracle中也可以使用concat函数,但是它只最多连接两个串。而MySQL中concat可以连接多个串。在SQL Server中则使用+进行串连接)。

    当然,这两个串可以是列名或字面值。例如:

    这样,查询出的结果就类似:“辽宁丹东”,将列或串连接起来中间是没有空格的。当然为了阅读起来更方便,可以利用逗号或空格将province和city列连接起来,形成类似“辽宁,丹东”的效果:

    以上是比较正统的用法。

    ---------------------我是分割线----------------------------

    下面是我发现的旁门左道。

    最近写一个查询的时候,为了偷懒,想用一条语句来查询一个或多个列(当然,前提是这多个列的类型是一样的)中含有某一字符(即模糊查询)的记录。例如表T中有a、b、c、d四个列,想要将a、b、c中任意一个列或多个列中含有字符“x“的记录查出来,可以使用如下语句:

    但个人感觉这种用法其实并不是太好,只是有时候可以偷偷懒^_^

    ||究竟是如何工作的不太理解,只有根据自己的实验得到一个猜想:

    像上面那个例子,应该是吧a、b、c三列的值连在了一起,然后查找‘%x%’这样的字符。换句话来说,如果某一条记录中abc三列的值分别为”rs“、”tx“、”yz“连在一起是”rstxyz“,而你的查询条件是'%xy%'(想查a、b、c中一个列或多个列是否含有”xy“)。本来是没有的,但是像类似上面例子那样使用的话,就会查到有这样的记录。这点我是试过的,的确会出现这样的情况。

    当然,上面的情况也可以避免,可以在连接符||中间加上一些分隔标志,这些分隔标志必须是列中不存在的,如”,“,即

    同时,这种用法不适合条件是”=“的精确查询,因为a、b、c三列的值连在了一起会成为”rstxyz“,如果使用如下语句:

    就相当于在”rstxyz“中查找(而不是在a、b、c的一个或多个列中查找)。这样,本来在a、b、c中一列或多列中没有含有”rstxyz“,但是用上面的语句却可以查询出记录。而如果使用这样的语句

    按本意来说的话是应该查询到记录的,但是上面的语句却无法查询出来。

    总之,这样的用法有偷工减料的嫌疑,还是少用为好。

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值