在SQL Server的varchar列中获取最大数量

时间:2018-06-29 16:31:00

标签: sql-server numbers integer max varchar

我有一个varchar列,其中包含逗号分隔的数字。 我想获取该列中的最大数量。

+-------------------+--------------+
| reference_no      | Name         |
+-------------------|--------------+
| 17530, 20327      | John         |
| , 14864           | Smith        |
| 8509              | Michael      |
| 14864, 17530      | Kelly        |
+-------------------+--------------+

因此,在上面的列(reference_no)示例中,输出应为20327。

然后我必须选择包含此数字的行。

2 个答案:

答案 0 :(得分:0)

假设不是2016 +

如果任何特定行的reference_no中的值不超过4,则可能是parsename()

如果大于4,则可能需要修复数据或使用拆分/解析功能。

示例

Select MaxValue = max(V)
 From  YourTable A
 Cross Apply ( values (replace([reference_no],',','.')) ) B(S)
 Cross Apply ( values (try_convert(int,parsename(S,1)))
                     ,(try_convert(int,parsename(S,2)))
                     ,(try_convert(int,parsename(S,3)))
                     ,(try_convert(int,parsename(S,4)))
             ) C(V)

返回

MaxValue
20327

答案 1 :(得分:0)

尝试以下操作:

declare @tab table (reference_no varchar(max), [Name] varchar(100))
insert into @tab
select  '17530, 20327','John'    union
select  ', 14864     ','Smith'   union
select  '8509        ','Michael' union
select  '14864, 17530','Kelly' 

create table #final (val int)

insert into #final
    SELECT Split.a.value('.', 'VARCHAR(100)') AS String
    FROM  (SELECT reference_no reference_no,  
            CAST ('<S>' + REPLACE(reference_no, ',', '</S><S>') + '</S>' AS XML) AS String  
        FROM @tab) AS A CROSS APPLY String.nodes ('/S') AS Split(a);

select * from @tab where reference_no like '%'+ (select convert(varchar(100), max(val)) from #final) + '%'
drop table #final