使用CASE语句

更新:以前的语法(如less数人指出)不起作用。 您可以使用CASE如下:

WHERE OrderNumber LIKE CASE WHEN IsNumeric(@OrderNumber) = 1 THEN @OrderNumber ELSE '%' + @OrderNumber END

或者你可以使用像@JReed指出的IF语句。

你应该可以做到这一点,没有任何IF或CASE

WHERE (IsNumeric(@OrderNumber) AND (CAST OrderNumber AS VARCHAR) = (CAST @OrderNumber AS VARCHAR) OR (NOT IsNumeric(@OrderNumber) AND OrderNumber LIKE ('%' + @OrderNumber))

根据SQL的风格,您可能需要根据是否支持隐式转换将订单号上的强制转换为INT或VARCHAR。

这是WHERE子句中非常常见的技术。 如果你想在WHERE子句中应用一些“IF”逻辑,你所要做的就是把额外的条件和一个布尔AND加到需要应用的部分。

在SQL中没有一个好的方法来做到这一点。 我看到的一些方法:

1)使用CASE结合布尔运算符:

WHERE OrderNumber = CASE WHEN (IsNumeric(@OrderNumber) = 1) THEN CONVERT(INT, @OrderNumber) ELSE -9999 -- Some numeric value that just cannot exist in the column END OR FirstName LIKE CASE WHEN (IsNumeric(@OrderNumber) = 0) THEN '%' + @OrderNumber ELSE '' END

2)在SELECT之外使用IF

IF (IsNumeric(@OrderNumber)) = 1 BEGIN SELECT * FROM Table WHERE @OrderNumber = OrderNumber END ELSE BEGIN SELECT * FROM Table WHERE OrderNumber LIKE '%' + @OrderNumber END

3)使用一个长string,有条件地编写你的SQL语句,然后使用EXEC

第三种方法是可怕的,但它是几乎唯一的想法,如果你有这样的变数条件。

你根本不需要IF语句。

WHERE (IsNumeric(@OrderNumber) = 1 AND OrderNumber = @OrderNumber) OR (IsNumeric(@OrderNumber) = 0 AND OrderNumber LIKE '%' + @OrderNumber + '%')

使用CASE语句而不是IF。

你想要CASE语句

WHERE OrderNumber LIKE CASE WHEN IsNumeric(@OrderNumber)=1 THEN @OrderNumber ELSE '%' + @OrderNumber END

我认为在哪里…就像/ = …案例…然后…可以和布尔人一起工作。 我正在使用T-SQL。

场景:比方说,如果bool是假的,你想得到Person-30的爱好,而如果bool是真的,Person-42的爱好。 (有些人认为,业务计算周期占业务计算周期的90%以上,因此付出的代价很高)。

CREATE PROCEDURE sp_Case @bool bit AS SELECT Person.Hobbies FROM Person WHERE Person.ID = case @bool when 0 then 30 when 1 then 42 end;

WHERE(IsNumeric(@OrderNumber)<> 1或OrderNumber = @OrderNumber)

AND(IsNumber(@OrderNumber)= 1或OrderNumber LIKE'%'

+ @订单号+'%')

以下示例将执行查询作为布尔expression式的一部分,然后根据布尔expression式的结果执行略有不同的语句块。 每个语句块以BEGIN开始并以END结束。

USE AdventureWorks2012; GO DECLARE @AvgWeight decimal(8,2), @BikeCount int IF (SELECT COUNT(*) FROM Production.Product WHERE Name LIKE 'Touring-3000%' ) > 5 BEGIN SET @BikeCount = (SELECT COUNT(*) FROM Production.Product WHERE Name LIKE 'Touring-3000%'); SET @AvgWeight = (SELECT AVG(Weight) FROM Production.Product WHERE Name LIKE 'Touring-3000%'); PRINT 'There are ' + CAST(@BikeCount AS varchar(3)) + ' Touring-3000 bikes.' PRINT 'The average weight of the top 5 Touring-3000 bikes is ' + CAST(@AvgWeight AS varchar(8)) + '.'; END ELSE BEGIN SET @AvgWeight = (SELECT AVG(Weight) FROM Production.Product WHERE Name LIKE 'Touring-3000%' ); PRINT 'Average weight of the Touring-3000 bikes is ' + CAST(@AvgWeight AS varchar(8)) + '.' ; END ; GO

使用嵌套的IF … ELSE语句以下示例显示了如何将IF … ELSE语句嵌套在另一个中。 将@Numbervariables设置为5,50和500以testing每个语句。

DECLARE @Number int SET @Number = 50 IF @Number > 100 PRINT 'The number is large.' ELSE BEGIN IF @Number < 10 PRINT 'The number is small' ELSE PRINT 'The number is medium' END ; GO

If @LstTransDt is Null begin Set @OpenQty=0 end else begin Select @OpenQty=IsNull(Sum(ClosingQty),0) From ProductAndDepotWiseMonitoring Where Pcd=@PCd And PtpCd=@PTpCd And TransDt=@LstTransDt end

看看这是否有帮助。

USE AdventureWorks2012; GO IF (SELECT COUNT(*) FROM Production.Product WHERE Name LIKE 'Touring-3000%' ) > 5 PRINT 'There are more than 5 Touring-3000 bicycles.' ELSE PRINT 'There are 5 or less Touring-3000 bicycles.' ; GO

Oracle中where后面加if,SQL:WHERE子句中的IF子句相关推荐

  1. Java 类中各成分加载顺序和内存中的存放位置

    一.什么时候会加载类? 使用到类中的内容时加载:有三种情况 1.创建对象:new StaticCode(); 2.使用类中的静态成员:StaticCode.num=9; StaticCode.show ...

  2. vb语言中怎样编码窗体中所有字体加粗_VBText控件中使字体加粗和倾斜的代码是什么...

    展开全部 VBText控件中使字体加粗和倾e69da5e6ba9062616964757a686964616f31333365656537斜的代码是: 加粗 Label1.FontBold = Tru ...

  3. mysql left join中on后加条件判断和where中加条件的区别

    left join中关于where和on条件的几个知识点:1.多表left join是会生成一张临时表,并返回给用户2.where条件是针对最后生成的这张临时表进行过滤,过滤掉不符合where条件的记 ...

  4. oracle中的hint是什么,SQL优化过程中常见Oracle中HINT的30个用法

    1. /*+ALL_ROWS*/ 表明对语句块选择基于开销的优化方法,并获得最佳吞吐量,使资源消耗最小化. 例如: SELECT /*+ALL+_ROWS*/ EMP_NO,EMP_NAM,DAT_I ...

  5. oracle按条件导出表中数据库,设计题: 请将SQL Server数据库所有内容导出到Oracle数据库中。 请将Oracle数据库所有内容导入到SQL Server数据库中。_学小易找答案...

    [多选题]显卡的发展史主要包括( )几个发展阶段. [问答题]分析穆旦的爱情诗. [多选题]图片运用了哪几种针法?( ) [判断题]豪华邮轮是指环球海上航行或在地中海.加勒比海等特定地区航行的,以在船 ...

  6. latex中表格怎么加标题_在LateX中输入公式、表格技巧

    文章目录 公式编辑器表格编辑器Latex设置表格字体大小LateX给表格加标题和标签LateX插入三线表LateX安装指南 如果在LateX中直接输入.编辑公式或表格,不是不可以,但是不能直接可视化编 ...

  7. html中怎么只加一条边框,html中如何让层只显示上下边框.急

    html中如何让层只显示上下边框.急以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 中如何让层只显示上下边框.急 设定层 ...

  8. js中遍历数组加到新数组_JS中的真伪数组

    前端inn 公众号ID:前端inn 关注 作者:冥冥之中立刻有 1. 快速理解伪数组 相关概念 伪数组也称为类数组 伪数组是一个对象 伪数组的特点 [1]具有length属性 [2]按索引方式存储数据 ...

  9. php中怎么函数加字符串,如何使用PHP中的字符串函数

    如何使用PHP中的字符串函数 发布时间:2016-06-17 来源: 点击: 次 如何使用PHP中的字符串函数 PHP中的字符串操作功能是比较多的,重要的有以下这些: (1)echo,print,pr ...

最新文章

  1. stm32怎么用keil软件进行仿真?(必需掌握的技能)
  2. 打通Devops的Scrum敏捷工具
  3. react-navigation 使用教程(配完整项目)
  4. flex4实现图片的动态切换
  5. 基于operator sdk编写一个k8s自定义资源管理应用
  6. html标题怎么分开,html – 如何使用angularjs将标签标题与其主体分开?
  7. python web框架 多线程_Django基础知识 web框架的本质详解
  8. 软件开发计划_敏捷软件开发实践:估算与计划读书笔记123第21章 关于计划的沟通...
  9. CST normalize S-parameter to given impedance
  10. 【渝粤题库】陕西师范大学292969 会计学 作业 (专升本、高起本)
  11. 修改IntelliJ IDEA包层级结构显示方式
  12. GitHub 标星 119K+!这些神器仅需一行代码即可下载全网视频!
  13. css 立体管道图_高层住宅管道井内密集管线施工方法研究
  14. 训练神经网络的详细步骤,神经网络训练完怎么用
  15. SMARTFORM打印程序模板
  16. 系统分析师成长之路 转
  17. kmp算法:next数组。 手算思想易学版
  18. 【EXLIBRIS】#小词旮旯#
  19. 关于物联网远程控制技术,你了解的有多少?
  20. 蓝牙BQB认证的过程与方式(SIG)

热门文章

  1. redhat linux 安装 gcc编译器
  2. Vue 中 store 基本用法
  3. 乡村振兴战略下传统村落文化旅游设计 | 年度图书,踔厉奋发,勇毅前行
  4. this和super
  5. 保研笔记一 软件工程与计算卷二(1-7章)
  6. GTD系列之我为什么使用GTD管理个人体系
  7. win10 安装 GPU+Tensorflow
  8. copyAWS 亚马逊云是什么,怎么发展起来的
  9. 牛客网刷编程题 2020年05月27日
  10. 解决Excel打开UTF-8编码CSV文件乱码的问题亲测有效