mysql中的if()函数在sqlserver中类似的写法

今天在jpa项目中由于业务原因需要手写一段原生sql。
在jpa的项目中是利用注解来实现原生sql的编写

@Query(value="",nativeQuery=true)

在mysql中实现select复杂查询的时候,是可以使用if()判断来加入查询的条件

项目中使用sql查询的时候
例如:
在项目连接数据库的我们会需要给sql语句注入查询条件的值

select 字段1,字段2 from 表 where 字段1 = ?1 and 字段2 = ?2;

但是我想在原生sql中添加判断于是找到了MySQL的方式

select 字段1,字段2 from 表 where 字段1 = if(true,1,2) and 字段2 = ?2

if(true,1,2) 的三个值是三目表达式的原理
我发现if()函数在SQL server中并不适用,然后我就采用了代码块的写法

if(条件)
	begin 
		//sql语句
	end
else
	begin
		//sql语句
	end

这种写法虽说长了一点,但是还是很实用的,下面附上我写的代码块
这里如果把sql合并成为一条的话,效率是会直接下降好几十倍的

@Query(value = " if(?2 = '') " +
            "begin " +
            "select orders.dealerid,orders.orderid,orders.createddate,orders.customername," +
            "orderlines.description, orderlines.discountPercentage, orderlines.linetotal,orderlines.partNumber,orderlines.productCode, orderlines.quantity, orderlines.salesPrice " +
            "from (select id,dealerid,orderid,createddate,customername from orders " +
            "where dealerid = ?3 and orderstatus in (1,2,3,4) and orderid like ?1% and ordercode in (0,2,3,4,5,6,7,8,9) and display = 1 and createddate between ?4 and ?5) as orders " +
            "left join orderlines on orders.id = orderlines.orderid " +
            "end " +
            "else " +
            "begin " +
            "select orders.dealerid,orders.orderid,orders.createddate,orders.customername," +
            "orderlines.description, orderlines.discountPercentage, orderlines.linetotal,orderlines.partNumber,orderlines.productCode, orderlines.quantity, orderlines.salesPrice " +
            "from (select id,dealerid,orderid,createddate,customername from orders " +
            "where customername = ?2 and orderstatus in (1,2,3,4) and orderid like ?1% and ordercode in (0,2,3,4,5,6,7,8,9) and display = 1 and createddate between ?4 and ?5) as orders " +
            "left join orderlines on orders.id = orderlines.orderid " +
            "end", nativeQuery = true)
    List<Map> exportOrderDetail(String orderId,String customerName,String dealerId,String startTime,String endTime);

这种方式就是把sql语句用代码块的方式写出来去执行就OK了。
文章写到这里发现有点跑题了,更像是查找出同样的数据,在sql语句中进行判断并执行,更适用于相同数据结果、不同查找条件导出数据时来使用。
这种方法在执行上来说没太大的毛病,但是治标不治本,还是没有达到mysql的if()效果一样,希望知道的大佬们告知我一下,本人现在这里谢谢啦

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值