簡體   English   中英

在nvarchar列中獲得最大值

[英]Get the greatest value in a nvarchar column

我正在使用SQL Server 2012 SP2開發數據庫。

我有一個帶有NVARCHAR(20)列的表,它將有數字:“ 000001”,“ 000002”等。

我需要在該列中獲得最大的價值並將其轉換為int。 我該怎么做?

我發現我可以使用以下sql語句將nvarchar轉換為int:
SELECT CAST(YourVarcharCol AS INT) FROM Table

但是我不知道如何在該列中獲取最大值,因為數字是nvarchar。

更新:

順便說一句,此列為NVARCHAR,因為我需要在其上存儲文本。 我正在測試我的解決方案,我需要存儲數字即可對其進行測試。

如果像給定的示例中那樣填充數字,並且所有數字都具有相同的寬度 ,則可以按字母數字順序對其進行排序,然后將最大值 BIGINTINTBIGINT (取決於您的數字范圍)。

如果有很多行,那就快得多 ,特別是如果此列上有索引...

就像是

SELECT TOP 1 * FROM YourTable
ORDER BY NumberColumn DESC

或者,如果僅需要最大值,則:

SELECT MAX(NumberColumn) FROM YourTable

如果必須處理負數其他填充數字 ,則必須先將其轉換

SELECT TOP 1 * FROM YourTable
ORDER BY CAST(NumberColumn AS INT) DESC

要么

SELECT MAX(CAST(NumberColumn AS INT)) FROM YourTable

請注意:

  • 如果您有很多行, 第二可能會變慢 閱讀有關可精制
  • 如果您的NumberColumn可能包含無效值 ,則必須檢查一下ISNUMERIC()
  • 最好的解決方案 -無論如何-都是使用索引數字列來存儲這些值

試試這個...

我認為MAX足夠了。

SELECT max(CAST(YourVarcharCol AS INT)) FROM Table

嘗試這個

SELECT MAX(t.Y) from (SELECT CAST(YourVarcharCol AS INT) as Y FROM Table) t

您應該嘗試此方法以找到最高價值:

SELECT MAX(CAST(YourVarcharCol AS INT)) AS FROM Table

這將返回max int value

SELECT MAX(IIF(ISNUMERIC(YourVarcharCol) = 1, YourVarcharCol, '0') * 1) FROM Table

如果所有數據都遵循相同的填充和格式化模式,則將執行簡單的max(col)。

但是,如果沒有,則必須先將值強制轉換為int。 搜索轉換為其他數據類型的列將不使用索引(如果有的話),但將掃描整個表。 根據您的要求和表中的行數,這可能對您不可行。 如果需要性能,則創建一個計算的列作為try_cast(col int),並在其上創建索引。

請注意,您不應使用強制轉換,而應使用try_cast來防止無法強制轉換的值(如果您使用數據類型存儲本質上是另一種數據類型的內容,則總是會出現錯誤)。

當然,如果您可以將原始列的類型更改為int,那將是最好的。

你可以這樣使用

select  max(cast(ColumnName AS INT ))from TableName

暫無
暫無

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

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