我有一個存儲安裝在客戶端上的軟件版本的表。我需要返回最高版本的值。 MAX(versionValue)不會返回最高值,因爲該值的格式類似於2.3.0.99。如果最高值是2.3.0.122,MAX返回2.3.0.99作爲最高值,這是不正確的。我相信這很簡單,我剛剛碰壁,谷歌現在沒有任何幫助。任何洞察力將不勝感激。MAX值與多個小數點
回答
謝謝大家。我最終在CLR中創建了一個UDF。數據庫與第三方產品相關聯,因此重建模式不是一種選擇。
UDF或用戶定義的聚集?後者似乎更合適。 – 2011-03-01 18:01:10
抱歉,用戶定義的聚合:) – 2011-03-01 18:04:01
如果你可以改變數據庫模式和假設的版本始終遵循您可以添加4個新列的
主要,次要,建立相同的格式,修訂
這些將隨後都是整數你可以那麼無論用戶字符串concatination給出的版本號2.3.0.122或使用arithmatic獲得最大的版本,例如
(主要* 1000)+(次要* 100)+(編譯* 10)+修訂
只有issu因此需要做一個全表掃描來找出最高的是什麼,並且可能存在一個問題,即次要版本太高以至於無法發佈主要版本。
但是我相信你的想法。
您正在遇到的問題是,因爲要存儲4條信息中的一列,現在需要分解成構成件。
理想情況下,你應該把你的表格放入1NF,即將它們拆分成4列(然後在其上放置一個複合索引)。
你可以有一個(非持久化)計算列是連接它們進行顯示。
如果這是不可能的下面是不是可優化搜索,但做這項工作。
DECLARE @versions TABLE (
version_number varchar(15),
productid int)
INSERT INTO @versions
SELECT '2.3.0.122',1 UNION ALL
SELECT '2.3.0.99',1 UNION ALL
SELECT '2.3.0.122',2 UNION ALL
SELECT '2.4.0.99',2;
WITH cte
AS (select productid,
version_number,
ROW_NUMBER() over (partition by productid
order by CAST('/' +
version_number + '/' AS hierarchyid) desc) AS RN
FROM @versions)
SELECT productid,
version_number
FROM cte
WHERE RN = 1
- 1. 如何解析與多個小數點
- 2. 與蟒蛇多個小數點
- 3. 防止多個小數點
- 4. 查找與多個條件,一個是MAX值
- 5. 如何回顯多個MAX值
- 6. MySQL - 具有日期的多個MAX值
- 7. 秩序與價值多小數點列在MySQL
- 8. 使用MAX與多表
- 9. 生成MAX與多行
- 10. 列小數點值
- 11. 顯示MAX值與加入
- 12. Linq Max與默認值
- 13. max()多維數組
- 14. 存儲號碼與Rails的多個小數點DB
- 15. Android比較具有多個小數點的值
- 16. QDoubleValidator接受多個小數點
- 17. 爲什麼sql中的max函數返回多個值
- 18. 小時的時差與小數點後兩位小數點差
- 19. gnuplot max,列中差異的最小值
- 20. MySQL MAX每小時連接最佳值
- 21. 數值與多個值匹配r中
- 22. Google charts更多小數點
- 23. 顯示多個MAX導致
- 24. mysql max有多個實例
- 25. 與隱含小數點
- 26. 小數點與std :: stringstream?
- 27. 只有小數點與fmt:formatNumber?
- 28. 小數點後不賦值
- 29. 按小數點排列值
- 30. 選擇第二個MAX值
SQL Server在處理versionValue爲字符串。你必須編寫你自己的函數,讓我們說GetLatestVersion來檢索最後的版本。或者,您可能希望在存儲版本值的表中添加日期列,並將getdate()作爲默認值,然後選擇按日期排序的最後一個版本值,降序。 – 2011-03-01 06:31:55