We have some numbers values in SQL server database such like 7.11 and 7.6.
Actually 7.11 is later version than 7.6, when using "max(vernum)" in SQL server, it will return 7.6. How can we let SQL server return 7.11?
Thanks
Asked
Active
Viewed 401 times
1
-
Does this answer your question? [How to compare software versions using SQL Server?](https://stackoverflow.com/questions/11364242/how-to-compare-software-versions-using-sql-server) – Rion Williams Dec 13 '19 at 05:21
4 Answers
2
You should go read the official docs .
By default, SQL Server uses rounding when converting a number to a decimal or numeric value with a lower precision and scale
Try This
SELECT MAX(Version) OVER(ORDER BY CAST(PARSENAME(version, 2) AS INT) DESC,CAST(PARSENAME(version, 1) AS INT) DESC) Version, Version
FROM yourTable
Vignesh Kumar A
- 27,863
- 13
- 63
- 115
1
Off the top of my head, you could use a TOP query here, using ordering by casting the major and minor version numbers to integers:
SELECT TOP 1 version
FROM yourTable
ORDER BY
CAST(LEFT(version, CHARINDEX('.', version) - 1) AS INT) DESC,
CAST(SUBSTRING(version, CHARINDEX('.', version) + 1, LEN(version)) AS INT) DESC;
Tim Biegeleisen
- 502,043
- 27
- 286
- 360
1
I'll give you a more shorter answer of this.
with cte as (
select 7.11 as ver
union all
select 7.6
)select top 1 ver from cte
order by parsename(ver, 2), parsename(cast(ver as float), 1)
Ed Bangga
- 12,879
- 4
- 16
- 30
1
You can try this.
CREATE TABLE #Numbers (value float);
INSERT INTO #Numbers (value)
VALUES (7.1);
INSERT INTO #Numbers (value)
VALUES (7.6);
INSERT INTO #Numbers (value)
VALUES (7.11);
INSERT INTO #Numbers (value)
VALUES (1.1);
INSERT INTO #Numbers (value)
VALUES (6.5);
SELECT Top 1 VALUE , Cast(PARSENAME(VALUE,1) as Int) AS DECIMAL_ONLY
FROM #NUMBERS
order by 2 desc
Suraj Kumar
- 5,547
- 8
- 20
- 42