sql 服务器中拆分操作后检查数据类型
Checking data type after a split operaton in sql server
这是我的问题。我收到一个字符串,其值可以是用逗号分隔的数字或字母数字:
'1,2,3,4' 或 '1,2,b'
我的目标是 return 具有以下条件的另一个字符串:
数值:Return相同的字符串
字母数字值:Return 单引号之间用逗号分隔的值 '1','2','b'
到目前为止,这是我的解决方案:
declare @values nvarchar(max) = '1,2,a', @result nvarchar(max)
set @result = (
select REPLACE(@values, ',', '')
)
begin try
set @result = @result*1
set @result = @values
end try
begin catch
set @result = ( select ''''+ STRING_AGG( value, ''',''') + ''''
from string_split(@values, ','))
end catch
select @result
是否可以在不涉及 try/catch 块的情况下得出结果? (建筑师要求)
您可以将您的逻辑合并到一个语句中,如下所示
select
case when v like '%[A-z]%' then alpha
else v
end
from (select @values)v(v)
cross apply (
select ''''+ STRING_AGG( value, ''',''') + ''''
from string_split(v, ',')
)s(alpha)
只是另一种选择(假设没有小数)
Declare @S varchar(50) = '1,2,3,4'
--Set @S ='1,2,b'
Select case when try_convert(bigint,replace(@S,',','')) is null
then ''''+replace(@S,',',''',''')+''''
else @S
end
结果
'1','2','b'
或
1,2,3,4
注:
如果值 > 9,223,372,036,854,775,807 那么您可以使用 try_convert(float,...)
declare @values nvarchar(max) = replicate('1,2.5,3', 15);
select case isjson('['+@values+']') when 1 then @values else ''''+replace(@values, ',', ''',''')+'''' end;
这是我的问题。我收到一个字符串,其值可以是用逗号分隔的数字或字母数字:
'1,2,3,4' 或 '1,2,b'
我的目标是 return 具有以下条件的另一个字符串:
数值:Return相同的字符串
字母数字值:Return 单引号之间用逗号分隔的值 '1','2','b'
到目前为止,这是我的解决方案:
declare @values nvarchar(max) = '1,2,a', @result nvarchar(max)
set @result = (
select REPLACE(@values, ',', '')
)
begin try
set @result = @result*1
set @result = @values
end try
begin catch
set @result = ( select ''''+ STRING_AGG( value, ''',''') + ''''
from string_split(@values, ','))
end catch
select @result
是否可以在不涉及 try/catch 块的情况下得出结果? (建筑师要求)
您可以将您的逻辑合并到一个语句中,如下所示
select
case when v like '%[A-z]%' then alpha
else v
end
from (select @values)v(v)
cross apply (
select ''''+ STRING_AGG( value, ''',''') + ''''
from string_split(v, ',')
)s(alpha)
只是另一种选择(假设没有小数)
Declare @S varchar(50) = '1,2,3,4'
--Set @S ='1,2,b'
Select case when try_convert(bigint,replace(@S,',','')) is null
then ''''+replace(@S,',',''',''')+''''
else @S
end
结果
'1','2','b'
或
1,2,3,4
注:
如果值 > 9,223,372,036,854,775,807 那么您可以使用 try_convert(float,...)
declare @values nvarchar(max) = replicate('1,2.5,3', 15);
select case isjson('['+@values+']') when 1 then @values else ''''+replace(@values, ',', ''',''')+'''' end;