sql >> データベース >  >> RDS >> Sqlserver

巨大なバイナリ (ファイル) の一部だけを選択するにはどうすればよいですか?

    わかりました。これを行う方法は、サブストリング関数を使用することです。MS は、バイナリで機能すると正確に述べています。彼らが言っていないのは、部分文字列が 8,000 バイトしか返さないということです。

    つまり、blob データ型が画像で、これを使用する場合:

     select substring(BlobField,0,100000000) 
     from TableWithHugeBlobField
     where ID = SomeIDValue
    
     --all you'll get is the first 8K bytes (use DataLength function to get the size)
      

    ただし、varbinary(max) の変数を宣言し、blob フィールドのデータ型が varbinary(max) (または便利なサイズ) の場合は、部分文字列関数を使用して、部分バイナリを宣言した変数に戻します。これはうまくいきます。このように:

     Declare @PartialImage varbinary(max) 
     select @PartialImage = substring(BlobField, 0, 100000000) --1GB
     from TableWithHugeBlobField
     where ID = SomeIDValue
    
     select DataLength(@PartialImage) -- should = 1GB
      

    なぜ SQL を使用してファイル データを保存するのでしょうか。それは有効な質問です。何百もの異なるクライアント デバイス (iPhone など) にデータをファイルとしてレプリケートする必要があると想像してください。クライアントごとにニーズが異なるため、各パッケージは他とは異なります。その場合、ファイル パッケージを BLOB としてデータベースに保存する方がはるかに簡単にプログラムできます。プログラムでフォルダを調べて、クライアントにストリーミングする適切なパッケージを見つけるよりも反対です。



    1. 多数または未定義のカテゴリとのクロス集計

    2. クエリよりも短い時間のRails`where`

    3. oracle-クエリは同じですが、11gと12cではプランが異なります

    4. Oracleで数値サブタイプ(smallint、intなど)を検索します