SQL从待选项中随机选一个

Posted ahdung

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL从待选项中随机选一个相关的知识,希望对你有一定的参考价值。

由于SQL Server没有数组类型,所以在面对“从若干待选项中选一个”这种需求时,往往要采取变通办法,比如弄个‘a|b|c’这样的字符串然后对字符串进行处理;又或者把待选项塞进一个临时表,然后把问题变成如何select的问题。下面的写法就是采用后一种,只不过得益于VALUES和CTE,我们不必真的一板一眼的去弄个临时表或表变量什么的,可以让代码更加紧凑,不至于那么冗杂。

写法1:

DECLARE @choice INT = (
SELECT Amount FROM (VALUES
 ( 88, 0)
,(118, 1)
,(138, 2)
,(188, 3) --缺点1:需要手动编号,有弄错的可能
) AS a(Amount,RowNo)
WHERE RowNo = FLOOR(4*RAND())) --缺点2:需要手动指定待选项数目,有弄错的可能

写法2:

WITH前加分号是一种保险的写法,否则可能遇到消息336的语法问题。

DECLARE @choice INT
;WITH cte AS (SELECT ROW_NUMBER() OVER(ORDER BY Num) AS RowNo,Num FROM (VALUES
 (88)
,(118)
,(138)
,(188)
) AS a(Num))
SELECT @choice=Num FROM cte WHERE RowNo=CEILING((SELECT COUNT(1) FROM cte)*RAND())

求更好写法,感谢。

-EOF-

以上是关于SQL从待选项中随机选一个的主要内容,如果未能解决你的问题,请参考以下文章

删除选项卡时在 ActionBar 选项卡片段中运行代码

按下锁定/主页按钮时的通知,单击返回选项卡片段时的通知

选项卡执行android中下一个片段中存在的代码

重新打开片段时应用程序崩溃

播放随机声音而不重复

Android:如何在选项卡内从一个片段导航到另一个片段? [关闭]