1

我会很感激任何帮助

我有一个字符串表示一个月的工作日和休息日:

 @month_col = 'HHWHHWHWWWHHWWWWWHHWWWWWHHWWWWW' -- H - Holiday, W-Working day, total 31 days

我需要获取index当月的最后一个工作日,在这种情况下31

或者如果

@month_col = 'HHWHHWHWWWHHWWWWWHHWWWWWHHWWHHH' 

那么最后一天是 28 日。

我知道如何获得第一个工作日:

--FIRST WORKING DAY OF MONTH
    WHILE @index<= @len
     BEGIN
     set @char = SUBSTRING(@month_col, @index, 1)
     IF @char = 'W' 
     begin
        select @first_day = CHARINDEX(@char, @month_col)
        break
     end
    SET @index= @index+ 1   
    END

那么,最后一个呢?我试图反向迭代但得到 NULL。提前致谢!

4

3 回答 3

2

反转字符串。

SET @Reversed = Reverse(@month_col);
WHILE @index<= @len
 BEGIN
 set @char = SUBSTRING(@Reversed, @index, 1)
 IF @char = 'W' 
 begin
    select @first_day = CHARINDEX(@char, @Reversed)
    break
 end
 SET @index= @index + 1
END
SET @lastday= @len - @first_day + 1   

编辑:我认为您的原始代码可以简单得多。不需要循环,使用CHARINDEX就是这样。

SELECT @first_day = CHARINDEX('W', @month_col, 1)

我的代码如下所示:

SELECT @first_day = CHARINDEX('W', REVERSE(@month_col), 1)
SET @lastday= @len - @first_day + 1
于 2014-01-23T09:44:29.620 回答
1

- 尝试这个

Select CHARINDEX('W', 'HHWHHWHWWWHHWWWWWHHWWWWWHHWWWWW') AS FirstWorkingDay,
LEN('HHWHHWHWWWHHWWWWWHHWWWWWHHWWWWW') - CHARINDEX('W', REVERSE('HHWHHWHWWWHHWWWWWHHWWWWWHHWWWWW')) -1  AS LastWorkingDay
于 2014-01-23T10:05:50.627 回答
1

Try this:

MySQL

@month_col = 'HHWHHWHWWWHHWWWWWHHWWWWWHHWWHHH' 

Locate character from starting of string

SELECT LOCATE('W', @month_col);

OUTPUT: 3

Locate character from end of the string

SELECT LENGTH(@month_col) + 1 - LOCATE('W', REVERSE(@month_col));

OUTPUT: 28


SQL SERVER

@month_col = 'HHWHHWHWWWHHWWWWWHHWWWWWHHWWHHH' 

Locate character from starting of string

SELECT CHARINDEX('W', @month_col, 0);

OUTPUT: 3

Locate character from end of the string

SELECT LEN(@month_col) + 1 - CHARINDEX('W', REVERSE(@month_col), 0);

OUTPUT: 28

于 2014-01-23T09:58:56.120 回答