当前位置: 首页 > 面试题库 >

MS SQL Server与MySQL FIELD()函数有什么相似之处?

尚宏硕
2023-03-14
问题内容

MySQL提供了一个名为FIELD()的字符串函数,该函数接受可变数量的参数。返回值是第一个参数在其余参数列表中的位置。换一种说法:

FIELD('d', 'a', 'b', 'c', 'd', 'e', 'f')

将返回4,因为’d’是第一个参数之后的第四个参数。

此功能提供了根据非常特定的顺序对查询结果进行排序的功能。对于我当前的应用程序,我需要管理四种状态:有效,已批准,已拒绝和已提交。但是,如果仅按状态列排序,我会感觉结果列表的可用性降低了,因为拒绝和活动状态项比已提交和已批准的项更为重要。

在MySQL中,我可以这样做:

SELECT <stuff> FROM <table> WHERE <conditions> ORDER BY FIELD(status, 'rejected', 'active','submitted', 'approved')

然后对结果进行排序,以使被拒绝的物品首先出现,然后是活动的物品,依此类推。因此,结果按对访客的重要性降低的顺序排序。

我可以创建一个单独的表,该表枚举状态的重要性级别,然后按降序对查询进行排序,但是自从切换到MS SQL
Server以来,这已经出现了好几次,所以我想询问一下我是否可以使用类似于MySQL的FIELD()的内置函数来避免多余的表和更复杂的查询。

谢谢
大卫·基斯


问题答案:

使用CASE表达式(SQL Server
2005+):

ORDER BY CASE status
           WHEN 'active' THEN 1
           WHEN 'approved' THEN 2
           WHEN 'rejected' THEN 3
           WHEN 'submitted' THEN 4
           ELSE 5
         END

您可以使用此语法进行更复杂的评估(包括组合,或者如果需要使用LIKE)

ORDER BY CASE 
           WHEN status LIKE 'active' THEN 1
           WHEN status LIKE 'approved' THEN 2
           WHEN status LIKE 'rejected' THEN 3
           WHEN status LIKE 'submitted' THEN 4
           ELSE 5
         END


 类似资料:
  • 问题内容: 我想知道Hibernate和Java EE 5中的简单持久性之间的区别/相似之处吗? 我不清楚Hibernate是否实现Java EE 5持久性实现,或者它是否是完全不同的后端系统数据表示方法。 我对Hibernate及其与Java EE 5教程中有关Java持久性的概念的关系感到困惑…您能否阐明Hibernate在实体和EJB上下文中的作用? 另外,我想知道其他方法(框架),例如JP

  • 本文向大家介绍Ruby与Python | 相似和不同之处,包括了Ruby与Python | 相似和不同之处的使用技巧和注意事项,需要的朋友参考一下 Ruby与Python 如果我们谈论Ruby和Python,它们都是高级编程语言。另一方面,它们都有一些相似之处和不同之处。让我们先谈谈它们的相似之处。 Ruby和Python的相似之处 您可以使用它们两者来开发软件并分发它们,而无需支付任何许可费用。

  • 本文向大家介绍函数声明与函数表达式有什么区别?相关面试题,主要包含被问及函数声明与函数表达式有什么区别?时的应答技巧和注意事项,需要的朋友参考一下 函数声明 function fn() { ///... } 函数表达式 const aa = function() { ///... } 区别: 1.函数声明,函数名必须有,在函数表达式中可以省略函数名 2.函数声明会被预解析,函数表达式不会

  • 我的代码是从参数:title中选择文本。但我得到的结果是不对的。在我的例子中,类书扩展了媒体。 这是我的疑问。 我的参数是“哈里”。我想只得到一个结果,但我得到了我所有的数据。我的代码有什么错误?请帮忙。

  • 问题内容: 我有一个示例熊猫数据框df: 第二个df1: 我想获取不与df1重叠的df子集。实际上,我正在寻找SQL中EXCEPT操作数的等效项。 我使用了减去()函数-但这显然是错误的,因为减法执行逐元素的数值减法。所以我收到一条错误消息: 因此,问题是:熊猫SQL中的EXCEPT等效项是什么? 问题答案: 我认为您首先需要所有字符串列: 或者: 通过修改后的问题进行编辑:

  • 问题内容: 我一直在阅读iBooks中的快速编程指南。有人可以向我解释函数和闭包之间的区别是什么。只是它没有名称并且可以在表达式中使用? 问题答案: 函数实际上只是命名为闭包。以下至少在概念上是等效的: 在使用声明方法的情况下,这变得有些复杂,例如,关于自动插入公共命名参数等,添加了一些有趣的糖,例如,变为`func myMethod(foo:Int, #bar:Int, 但是,即使方法只是闭包的