【发布时间】:2019-12-13 05:17:31
【问题描述】:
我们在 SQL Server 数据库中有一些数值,例如 7.11 and 7.6。
其实7.11 is later version than 7.6,在SQL server中使用“max(vernum)”时,会返回7.6。我们怎样才能让 SQL Server 返回7.11?
谢谢
【问题讨论】:
标签: sql-server
我们在 SQL Server 数据库中有一些数值,例如 7.11 and 7.6。
其实7.11 is later version than 7.6,在SQL server中使用“max(vernum)”时,会返回7.6。我们怎样才能让 SQL Server 返回7.11?
谢谢
【问题讨论】:
标签: sql-server
你应该去阅读official docs。
默认情况下,SQL Server 在将数字转换为 精度和小数位数较低的小数或数值
试试这个
SELECT MAX(Version) OVER(ORDER BY CAST(PARSENAME(version, 2) AS INT) DESC,CAST(PARSENAME(version, 1) AS INT) DESC) Version, Version
FROM yourTable
【讨论】:
在我的脑海中,您可以在这里使用TOP 查询,通过将主要和次要版本号转换为整数来使用排序:
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;
【讨论】:
我会给你一个更简短的答案。
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)
【讨论】:
你可以试试这个。
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
【讨论】: