所以我有一个有趣的问题,我的表中有一个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
答案 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))