麻烦从varchar字段中选择最大值

时间:2017-10-31 19:10:04

标签: sql sql-server

所以我有一个有趣的问题,我的表中有一个varchar字段因为数字有连字符,所以示例数据看起来像这样......

composer update

我要做的是以某种方式从Field1中选择MAX(最高)值,

期望的最终结果。

tbla

Field1
102-1
20-1
56-1

问题是我无法使用像这样的查询...

Field1
102

因为它取消了FieldA的第一个数字,所以如果我使用上面的查询它给了我这个..

Select max(field1) from tblA order by fieldA Desc 

实际上我需要56-1

2 个答案:

答案 0 :(得分:1)

根据您正在做的事情,您可以使用top 1并按字段的整数部分降序排序,整个字符串降序如下:

select top 1
    Field1
from tbla
order by 
    convert(int,left(Field1,charindex('-',Field1+'-')-1)) desc
  , Field1 desc

rextester演示:http://rextester.com/BCM16018

返回:

+--------+
| Field1 |
+--------+
| 102-1  |
+--------+

在Sql Server 2012及更高版本中:当转换失败而不是错误时,try_convert(datatype,val)将返回null

答案 1 :(得分:0)

SELECT MAX(CAST(SUBSTRING(field1, 1, CHARINDEX('-',field1)-1) AS int))