我有一个表格,列值类似于“1.2.4.5”,“3.11.0.6”, '3.9.3.14','1.4.5.6.7',N / A等。我想找到该特定列的最大值。但是,当我使用此查询时,我没有得到最大值。
(SELECT max (CASE WHEN mycolumn = 'N/A'
THEN '-1000'
ELSE mycolumn
END )
FROM mytable
WHERE column like 'abc')
我得到3.9.3.14作为最大值而不是3.11 ....
有人可以帮助我吗?
答案 0 :(得分:6)
那些不是真正的小数 - 它们是包含多个点的字符串,所以将它们视为"小数"它们是无益的。
我们可以通过一些操作来完成您的查询。 SQL Server中有一种类型构建,更自然地代表了这种类型的结构 - hierarchyid
。如果我们将您的值转换为此类型,那么我们可以非常轻松地找到u201c/"/g
:
MAX
结果:
declare @t table (val varchar(93) not null)
insert into @t(val) values
('1.2.4.5'),
('3.11.0.6'),
('3.9.3.14'),
('1.4.5.6.7')
select MAX(CONVERT(hierarchyid,'/' + REPLACE(val,'.','/') + '/')).ToString()
from @t
我将完全将此字符串表示转换回原始形式的练习作为读者练习。或者,我建议您仍然可以使用此数据类型启动存储数据。
答案 1 :(得分:2)
MAX()
执行字母排序。
使用FIRST_VALUE
和HIERARCHYID
:
SELECT DISTINCT FIRST_VALUE(t.mycolumn) OVER(
ORDER BY CONVERT(HIERARCHYID, '/' + REPLACE(NULLIF(t.mycolumn,'N/A'), '.', '/') + '/') DESC) AS [Max]
FROM #mytable t