gpt4 book ai didi

sql - 类似于 MySQL FIELD() 函数的 MS SQL Server 功能是什么?

转载 作者:IT老高 更新时间:2023-10-29 00:07:03 30 4
gpt4 key购买 nike

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 expression (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

关于sql - 类似于 MySQL FIELD() 函数的 MS SQL Server 功能是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3892406/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com