Sql server 当输入为二进制字符串格式时,如何转换为特定值
我有一种情况,我将得到一个字符串,如days varchar(7),days='1001101' 我想产生一个像这样的输出 1:星期日 0:缺席 0:缺席 1:星期四 1:星期四 0:abset 1:星期六 最终输出:星期日、星期四、星期六Sql server 当输入为二进制字符串格式时,如何转换为特定值,sql-server,sql-server-2008,sql-server-2005,sql-server-2008-r2,sql-server-2012,Sql Server,Sql Server 2008,Sql Server 2005,Sql Server 2008 R2,Sql Server 2012,我有一种情况,我将得到一个字符串,如days varchar(7),days='1001101' 我想产生一个像这样的输出 1:星期日 0:缺席 0:缺席 1:星期四 1:星期四 0:abset 1:星期六 最终输出:星期日、星期四、星期六 如何使用T-SQL函数实现它。(带输入输出参数的函数)使用选择函数获得结果。试试这个 注意:这仅适用于SQL SERVER 2012+。。如果您想在早期版本中使用它,只需使用案例语句而不是选择。只需简单介绍我使用的代码选择函数 CREATE FUNCTION
如何使用T-SQL函数实现它。(带输入输出参数的函数)使用
选择函数
获得结果。试试这个
注意:这仅适用于SQL SERVER 2012+。。如果您想在早期版本中使用它,只需使用案例语句
而不是选择
。只需简单介绍我使用的代码选择函数
CREATE FUNCTION dbo.Func (@dayss VARCHAR(1000))
returns VARCHAR(1000)
BEGIN
DECLARE @cnt INT =1,
@outpt VARCHAR(100),
@fina VARCHAR(100)='',
@outpt1 VARCHAR(100)=''
WHILE @cnt <= Len(@dayss)
BEGIN
SET @outpt = Substring(@dayss, @cnt, 1)
SELECT @outpt1 = CASE
WHEN @outpt = 1 THEN @outpt
+ Choose(@cnt, ':sunday ', ':monday ', ':tuesday ', ':wednesday ', ':thursday ', ':friday ', ':saturday ')
ELSE @outpt + ':absent '
END
SET @fina += @outpt1
SET @cnt+=1
END
RETURN @fina
END
SELECT dbo.Func('1001101')
输出:
周日周三周四周六
使用案例的传统方式
WHILE ( @i <= Len(@input) )
BEGIN
SET @temp = Substring(@input, @i, 1)
SET @output += ' '+(SELECT CASE
WHEN @temp = 1
AND @i = 1 THEN 'Sunday'
WHEN @temp = 1
AND @i = 2 THEN 'Monday'
WHEN @temp = 1
AND @i = 3 THEN 'Tuesday'
WHEN @temp = 1
AND @i = 4 THEN 'Wednesday'
WHEN @temp = 1
AND @i = 5 THEN 'Thursday'
WHEN @temp = 1
AND @i = 6 THEN 'Friday'
WHEN @temp = 1
AND @i = 7 THEN 'Saturday'
ELSE ''
END)
SET @i = @i + 1
END
PRINT @output
WHILE(@i创建函数dateconvert(@input varchar(100))
返回varchar(1000)
开始
声明
@i int=1,
@温度varchar(1000)='',
@输出1 varchar(1000)='',
@输出varchar(1000)
虽然(@i您到目前为止尝试了什么?我正在尝试使用caseUse@Pradeep answer解决它,因为函数将简单地为您完成这项工作,否则请查看使用CASE stmt的代码。选择??我使用的是2012版本。但它会给出以下错误消息。Msg 195,级别15,状态10,过程日期转换,第17行“选择”不是可识别的生成-在函数名中。@nishantnandgaonkar可能是兼容模式设置为SQL SERVER 2008
。请检查此链接
WHILE ( @i <= Len(@input) )
BEGIN
SET @temp = Substring(@input, @i, 1)
SET @output += ' '+(SELECT CASE
WHEN @temp = 1
AND @i = 1 THEN 'Sunday'
WHEN @temp = 1
AND @i = 2 THEN 'Monday'
WHEN @temp = 1
AND @i = 3 THEN 'Tuesday'
WHEN @temp = 1
AND @i = 4 THEN 'Wednesday'
WHEN @temp = 1
AND @i = 5 THEN 'Thursday'
WHEN @temp = 1
AND @i = 6 THEN 'Friday'
WHEN @temp = 1
AND @i = 7 THEN 'Saturday'
ELSE ''
END)
SET @i = @i + 1
END
PRINT @output
create function dateconvert(@input varchar(100))
returns varchar(1000)
begin
declare
@i int=1,
@temp varchar(1000)='',
@output1 varchar(1000)='',
@output varchar(1000)
while (@i<=len(@input))
begin
set @temp = substring(@input, @i, 1)
set @output= ( select case
when @temp = '1'
and @i = 1 then 'sunday'
when @temp = '1'
and @i = 2 then 'monday'
when @temp = '1'
and @i = 3 then 'tuesday'
when @temp = '1'
and @i = 4 then 'wednesday'
when @temp = '1'
and @i = 5 then 'thursday'
when @temp = '1'
and @i = 6 then 'friday'
when @temp = '1'
and @i = 7 then 'saturday'
else '_'
end )
set @output1=@output1+@output
set @i = @i + 1
end
return @output1
end