[解決済み] データベースのテーブルからランダムなレコードを取得する (T-SQL)
質問
SQLサーバーのテーブルからランダムなレコードを取得する簡潔な方法はありますか?
私はユニットテストデータをランダムにしたいので、テーブルからランダムなidを選択する簡単な方法を探しています。 英語では、selectは"Select one id from the table which the id is a random number between the lowest id in the table and the highest id in the table.".となります。
クエリを実行し、NULL値をテストし、NULLの場合に再実行することなく、これを行う方法を見つけることができません。
アイデアはありますか?
どのように解決するのですか?
<ブロッククオートsql serverテーブルからランダムなレコードを取得する簡潔な方法はありますか?
はい、あります。
SELECT TOP 1 * FROM table ORDER BY NEWID()
説明
A
NEWID()
が各行に対して生成され、それによってテーブルがソートされます。最初のレコードが返されます(つまり、"lowest" GUIDを持つレコードです)。
注意事項
-
GUID はバージョン 4 以降、擬似乱数として生成されます。
バージョン4のUUIDは、真の乱数または疑似乱数からUUIDを生成するためのものです。 擬似乱数からUUIDを生成するためのものです。
アルゴリズムは以下の通りです。
- の最上位ビット2つ(ビット6とビット7)をそれぞれ0と1に設定します。 clock_seq_hi_and_reserved の最上位ビット 2 つ(ビット 6 とビット 7)をそれぞれ 0 と 1 に設定します。
- time_hi_and_versionフィールドの最上位4ビット(ビット12~15)を、それぞれ0と1に設定します。 の4ビットのバージョン番号に設定する。 4.1.3節を参照してください。
- 他のすべてのビットをランダムに(または擬似的に)選択された値に設定する。 値を設定します。
-
代替案
SELECT TOP 1 * FROM table ORDER BY RAND()
は思ったようにはいきません。RAND()
はクエリごとに一つの値を返すので、すべての行が同じ値を共有することになります。 -
GUID値は擬似ランダムですが、より要求の厳しいアプリケーションでは、より良いPRNGが必要になるでしょう。
-
典型的なパフォーマンスは、約1,000,000行に対して10秒未満です。もちろん、システムにもよります。インデックスをヒットさせることは不可能であり、したがってパフォーマンスは比較的制限されることに注意してください。
関連
-
[解決済み] 一括読み込みができません。オペレーティングシステムのエラーコード5(アクセスが拒否されました。)
-
[解決済み] SQL ServerでSELECTからUPDATEする方法とは?
-
[解決済み] JavaScriptでランダムな文字列/文字を生成する
-
[解決済み] 乱数(int)を生成する方法を教えてください。
-
[解決済み] JavaScriptで2つの数値の間の乱数を生成する
-
[解決済み] SQL Server テーブルにカラムが存在するかどうかを確認する方法は?
-
[解決済み] SQL Server の DateTime データ型から日付だけを返す方法
-
[解決済み] SQLのIN句をパラメータ化する
-
[解決済み] SQL Server テーブルからランダムな n 行を選択する
-
[解決済み】SQL Serverで既存のテーブルにデフォルト値を持つカラムを追加する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】SQL Server データベース復元エラー:指定されたキャストは有効ではありません。(SqlManagerUI)
-
[解決済み] FOREIGN KEY制約で参照されているため、テーブルを切り捨てることができないのですか?
-
[解決済み] SQL Serverでシングルクォートを置換する
-
[解決済み] 管理者ユーザーで有効なxp_cmdshellへのアクセスが拒否されました。
-
[解決済み] SSRS レポートの定義が無効です。
-
[解決済み] 分散型トランザクションを開始できない
-
[解決済み] 階層テーブルの設計
-
[解決済み] 累積和の求め方
-
[解決済み] SQLサーバーを使用して文字列を切り詰める方法
-
[解決済み] SQL Server Management StudioでIntelliSenseが機能しない