相关疑难解决方法(0)

从SQL Server表中选择n个随机行

我有一个SQL Server表,其中包含大约50,000行.我想随机选择大约5,000行.我想到了一个复杂的方法,创建一个带有"随机数"列的临时表,将我的表复制到其中,循环遍历临时表并用每个行更新RAND(),然后从该表中选择随机数列< 0.1.我正在寻找一种更简单的方法,如果可能的话,在一个声明中.

本文建议使用该NEWID()功能.这看起来很有希望,但我看不出如何可靠地选择一定比例的行.

有人曾经这样做过吗?有任何想法吗?

sql sql-server random

296
推荐指数
9
解决办法
34万
查看次数

使用MYSQL创建随机数

我想知道有没有办法选择100到500之间随机生成的数字以及一个选择查询.

例如: SELECT name, address, random_number FROM users

我不必将此数字存储在db中,只能用于显示目的.

我试过这样的东西,但它无法开始工作..

SELECT name, address, FLOOR(RAND() * 500) AS random_number FROM users
Run Code Online (Sandbox Code Playgroud)

希望有人帮助我.谢谢

mysql sql

95
推荐指数
3
解决办法
11万
查看次数

在固定间隔中产生明显的随机时间

我试图产生8:00 AM至8:00 PM之间的随机时间为每一行是从数据集选择的,但是,我总是得到相同的随机值的每一行 -我想这是不同的每一行.

表模式和数据:

?????????????????????????
?  ID  ?  CREATED_DATE  ?
?????????????????????????
? ID/1 ?   26/04/2014   ?
? ID/2 ?   26/04/2014   ?
? ID/3 ?   26/04/2014   ?
? ID/4 ?   26/04/2014   ?
? ID/5 ?   26/04/2014   ?
?????????????????????????
Run Code Online (Sandbox Code Playgroud)

СurrentSQL语句:

SELECT [ID]
     , MyFunction.dbo.AddWorkDays(14, [CREATED_DATE]) AS [New Date]
     , CONVERT(VARCHAR, DATEADD(MILLISECOND, CAST(43200000 * RAND() AS INT), CONVERT(TIME, '08:00')), 114) AS [New Time]
FROM [RandomTable]
Run Code Online (Sandbox Code Playgroud)

当前结果(列中每行的相同时间[New Time]):

??????????????????????????????????????????
?  ID  ? …
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server sql-server-2008 random-time-generation

29
推荐指数
4
解决办法
8469
查看次数

T-SQL中的随机加权选择

如何根据所有候选行的应用权重在T-SQL中随机选择一个表行?

例如,我在一个表中有一组行加权为50,25和25(最多加100但不需要),我想随机选择其中一行,其统计结果相当于各自的重量.

t-sql sql-server random

24
推荐指数
2
解决办法
7585
查看次数

如何在SQL Server 2005中将随机数作为列返回?

我在SQL Server 2005上运行SQL查询,除了从数据库中查询2列之外,我还想随机返回1列随机数.我试过这个:

select column1, column2, floor(rand() * 10000) as column3 
from table1
Run Code Online (Sandbox Code Playgroud)

哪种方法有效,但问题是此查询在每一行返回相同的随机数.每次运行查询时它都是一个不同的数字,但它不会因行而异.我怎么能这样做并为每一行获得一个新的随机数?

sql sql-server random sql-server-2005

21
推荐指数
1
解决办法
2万
查看次数

SQL Server 2012列表中的随机字符串

说我有三个价值观,比尔,史蒂夫,杰克.我想用这些值随机更新一个表,例如

更新联系人设置firstname =('比尔','史蒂夫','杰克')其中city ='NY'

我如何随机化这些值?

谢谢

sql sql-server sql-server-2012

14
推荐指数
3
解决办法
1万
查看次数

如何将随机值插入SQL Server表?

我正在尝试将预定义值列表中的值随机插入到表中进行测试.我尝试使用此StackOverflow问题中找到的解决方案:

stackoverflow.com/.../update-sql-table-with-random-value-from-other-table

当II尝试这个时,所有插入的"随机"值对于所有3000条记录都是完全相同的.

当我运行实际选择随机行的查询部分时,每次我手动运行时都会选择一个随机记录,所以我知道查询有效.我最好的猜测是发生了什么:

  • SQL Server正在以SELECT某种方式进行优化,不允许对子查询进行多次评估
  • 随机值的种子在查询更新的每条记录上都是相同的

我坚持我的选择.我做错了什么,或者我还有另一种方法吗?

这是我正在使用的代码:

DECLARE @randomStuff TABLE ([id] INT, [val] VARCHAR(100))

INSERT INTO @randomStuff ([id], [val]) 
VALUES ( 1,  'Test Value 1' )
INSERT INTO @randomStuff ([id], [val])
VALUES ( 2,  'Test Value 2' )
INSERT INTO @randomStuff ([id], [val])
VALUES ( 3,  'Test Value 3' )
INSERT INTO @randomStuff ([id], [val])
VALUES ( 4,  'Test Value 4' )
INSERT INTO @randomStuff ([id], [val])
VALUES ( 5,  'Test Value 5' )
INSERT INTO …
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server random

10
推荐指数
1
解决办法
2万
查看次数

如何获得 CTE 中生成的随机数,使其在 JOIN 中不发生更改?

问题

我使用这种技术#Table_1为 CTE中表中的每一行生成一个随机数。然后我将 CTE 的结果加入到另一个表 上。我不是为 中的每一行获取随机数,而是为连接中的每个结果行获取一个新的随机数!#Table_2#Table_1

CREATE TABLE #Table_1 (Id INT)

CREATE TABLE #Table_2 (MyId INT, ParentId INT)

INSERT INTO #Table_1
VALUES (1), (2), (3)

INSERT INTO #Table_2
VALUES (1, 1), (2, 1), (3, 1), (4, 1), (1, 2), (2, 2), (3, 2), (1, 3)


;WITH RandomCTE AS
(
    SELECT Id, (ABS(CHECKSUM(NewId())) % 5)RandomNumber
    FROM #Table_1
)
SELECT r.Id, t.MyId, r.RandomNumber
FROM RandomCTE r
INNER JOIN #Table_2 t
    ON r.Id = t.ParentId
Run Code Online (Sandbox Code Playgroud)

结果

Id          MyId …
Run Code Online (Sandbox Code Playgroud)

sql sql-server random common-table-expression

6
推荐指数
1
解决办法
792
查看次数

CASE语句中随机生成的值返回NULL

根据这篇文章,在SQL Server中生成随机值的正确方法是:

ABS(CHECKSUM(NewId())) % 14   -- Returns a value between 0 and 13
Run Code Online (Sandbox Code Playgroud)

但是,在case语句中使用此表达式时,例如:

SELECT
    CASE ABS(CHECKSUM(NEWID())) % 4 
        WHEN 0 THEN 'String A' 
        WHEN 1 THEN 'String B' 
        WHEN 2 THEN 'String C' 
        WHEN 3 THEN 'String D'
    END AS RandomString -- Returns String A, B, C, D and NULLs.
FROM sys.all_objects
Run Code Online (Sandbox Code Playgroud)

outputtet RandomString列包含一些NULL,可以在这个SQL小提琴中看到.我发现我可以在CTE中包装随机化表达式以避免输出中的NULL,但我仍然想知道为什么上面的代码返回NULL?

WITH RandomNumber AS (
    SELECT ABS(CHECKSUM(NEWID())) % 4 AS N FROM sys.all_objects
)
SELECT TOP 100
    CASE N
        WHEN 0 THEN …
Run Code Online (Sandbox Code Playgroud)

t-sql sql-server random case

5
推荐指数
2
解决办法
1328
查看次数

能否在 CASE 语句中使用随机数 (SQL Server 2016)

我尝试构建一个适合更大 SELECT 的 CASE 语句。我希望每一行单独解析(每行使用不同的随机数),但在评估特定行中的 case 语句时,随机数是相同的(如果有意义的话)。

我努力了

    SELECT 
    [Player name]
    ,[Stake]
    ,[current jackpot]

         ,CASE

         WHEN 
         rand() < 0.23
         THEN
         'Win'
         WHEN
         rand() BETWEEN 0.23 AND 0.89
         then
         'Lose'
         when
         rand() >= 0.89
         then
         'Jackpot'
         else
         'other'
         end as [outcome]
...
Run Code Online (Sandbox Code Playgroud)

但事实上,我有时会得到“其他”结果,这告诉我每个 WHEN 都会创建不同的随机数进行评估。我也无法在开始时声明全局随机数并使用它,因为每一行都应该单独解析。

sql sql-server random

5
推荐指数
1
解决办法
3450
查看次数

在SQL Server中生成看似随机的唯一数字ID

我需要使用SQL Server生成看似随机的唯一8位数字 ID(可以在前面填充零).这是否有内置功能?我看到了这个 Identity属性,但它是顺序的,而不是随机的.

如果这是不可能的,那么直接将随机生成的ID写入db然后检查异常是一种好习惯吗?(请注意,我的应用程序是多线程的,因此在写入之前进行检查并不能保证唯一性,除非在原子操作中完成.)

谢谢!

更新:添加"数字"以澄清.编辑表明随机性不需要加密强或任何接近.看似随机就好了.奥利弗提出了一个优雅的解决方案,我已经使用这种方法发布了答案.谢谢,奥利弗!

c# sql-server asp.net-mvc

3
推荐指数
1
解决办法
5073
查看次数