我有一个varchar
列,其中包含逗号分隔的数字。
我想获取该列中的最大数量。
+-------------------+--------------+
| reference_no | Name |
+-------------------|--------------+
| 17530, 20327 | John |
| , 14864 | Smith |
| 8509 | Michael |
| 14864, 17530 | Kelly |
+-------------------+--------------+
因此,在上面的列(reference_no)示例中,输出应为20327。
然后我必须选择包含此数字的行。
答案 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