![](/img/trans.png)
[英]how to get the column name of the greatest value by using greatest function postgresql?
[英]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,因為我需要在其上存儲文本。 我正在測試我的解決方案,我只需要存儲數字即可對其進行測試。
如果像給定的示例中那樣填充數字,並且所有數字都具有相同的寬度 ,則可以按字母數字順序對其進行排序,然后將最大值 BIGINT
為INT
或BIGINT
(取決於您的數字范圍)。
如果有很多行,那就快得多 ,特別是如果此列上有索引...
就像是
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
請注意:
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.