Sql server 将varchar转换为十进制并比较查询中的值
我想在查询中比较varchar列中的十进制值。 如果每个groupid的最大年龄高于最小年龄*10,则应进行比较 例如,年龄列为varchar:Sql server 将varchar转换为十进制并比较查询中的值,sql-server,Sql Server,我想在查询中比较varchar列中的十进制值。 如果每个groupid的最大年龄高于最小年龄*10,则应进行比较 例如,年龄列为varchar: ID | Name | Age | GroupID -------------------------- 1 | AAA | 10.1 | 1 2 | BBB | 11 | 1 3 | CCC | 31.2 | 1 4 | DDD | 30.4 | 2 这就是我在寻找解决方案后尝试做的事情 SELECT TOP 10 * FRO
ID | Name | Age | GroupID
--------------------------
1 | AAA | 10.1 | 1
2 | BBB | 11 | 1
3 | CCC | 31.2 | 1
4 | DDD | 30.4 | 2
这就是我在寻找解决方案后尝试做的事情
SELECT TOP 10 * FROM Groups g
JOIN People p1 ON p1.GroupID = g.ID
JOIN People p2 ON p2.GroupID = g.ID
WHERE CONVERT(DECIMAL(8,2),ISNULL(p1.Age,0)) > (CONVERT(DECIMAL(8,2),ISNULL(p2.Age,0)) * 10)
提前谢谢 我想您应该使用窗口函数来实现:
select t.*
from (select t.*,
min(case when isnumeric(Age) = 1 then cast(Age as float) end) over
(partition by groupID) as minage
from table t
) t
where age > 10 * minage;
case语句有助于防止年龄不是数字的事件中出现错误。此外,我认为float对于age是一种足够好的数据类型,尽管您也可以使用decimal。age在您的db中真的是一个varchar吗?所以第一个想法应该是改变这一点!很遗憾,我无法更改列类型。首先感谢您的帮助!但我发现[Err]42000-[SQL Server]附近的语法不正确。我觉得这个语法正确。你能用表格的结构编辑你的问题吗?看起来年龄与其他列存储在一个单独的表中。