Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 当输入为二进制字符串格式时,如何转换为特定值_Sql Server_Sql Server 2008_Sql Server 2005_Sql Server 2008 R2_Sql Server 2012 - Fatal编程技术网

Sql server 当输入为二进制字符串格式时,如何转换为特定值

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

我有一种情况,我将得到一个字符串,如days varchar(7),days='1001101' 我想产生一个像这样的输出 1:星期日 0:缺席 0:缺席 1:星期四 1:星期四 0:abset 1:星期六

最终输出:星期日、星期四、星期六
如何使用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