簡體   English   中英

如何使用powershell在二進制(8)數組中找到最大值?

[英]How to find the maximum in array of binary(8) using powershell?

我試圖通過使用找到最大值

function ExecuteSqlQuery ($SQLQuery) {
try 
{
$Datatable = New-Object System.Data.DataTable    
$Connection = New-Object System.Data.SQLClient.SQLConnection
$Connection.ConnectionString = $connStr
$Connection.Open()
$Command = New-Object System.Data.SQLClient.SQLCommand
$Command.Connection = $Connection
$Command.CommandText = $SQLQuery
$Command.CommandTimeout=$commandTimeout
$Reader = $Command.ExecuteReader()
$Datatable.Load($Reader)
return $Datatable
}

$data= ExecuteSqlQuery "Select col1,col2,col3, RowVersion from table"
$byteArray = [System.Collections.ArrayList]@()
foreach ($row in $data) {

   $byteArray.Add($row.Item("RowVersion"))
}

$max=($byteArray | Measure-Object -Maximum).Maximum 
Write-host $max

但我收到一個錯誤:

錯誤:錯誤:無法比較“System.Byte[]”,因為它不是 IComparable

然后我嘗試轉換為 int64 並找到最大值

$byteArray = [System.Collections.ArrayList]@()
foreach ($row in $data) {

   $byteArray.Add([bitconverter]::ToInt64($row.Item("RowVersion"),0))
}
Write-Host ($byteArray | Measure-Object -Maximum).Maximum 
$max=[Convert]::ToByte(($byteArray | Measure-Object -Maximum).Maximum)   
Write-host $max

但是還是有錯誤,輸出:

9.1298706847202E+18
2017-10-25 21:00:51 錯誤:錯誤:對於 > 一個 Int32 來說,值要么太大要么太小。

有沒有辦法解決這個問題?
將二進制轉換為 int32 返回 0

來自 SQL 的binary(8)應該在 PowerShell 中表示為[byte[]] ,所以你有一個字節數組的 ArrayList。 沒有內置方法可以將字節數組與 .Net Framework 中的其他字節數組進行比較以進行排序。 該行為未定義,因此您必須定義它或以其他方式定義算法。

假設第一個字節是最重要的,第二個是次重要的,依此類推,您應該能夠通過執行以下操作來獲得“最大值”:

$byteArray | Sort-Object -Property {$_[0]},{$_[1]},{$_[2]},{$_[3]},{$_[4]},{$_[5]},{$_[6]},{$_[7]} -Descending | Select-Object -First 1

這僅查看前 8 個字節,但是,如果基本類型確實是binary(8) ,則該字段中只有 8 個字節。

如果這不起作用,那么您必須遍歷 ArrayList 並通過比較字節並保存最大值來自己找到最大值。

如果您只想要最大值,則可以為此使用 sql:

Select col1,col2,col3, RowVersion from table order by RowVersion desc

然后你的第一行包含最大值

嘗試這個

$byteArray.Add([System.Text.Encoding]::ASCII.GetString($row.Item("RowVersion")))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM