我很感激任何帮助
我有一个字符串代表一个月的工作日和休假日:
@month_col = 'HHWHHWHWWWHHWWWWWHHWWWWWHHWWWWW' -- H - Holiday, W-Working day, total 31 days
我需要获得当月最后一个工作日的index
,在这种情况下31
。
或者如果
@month_col = 'HHWHHWHWWWHHWWWWWHHWWWWWHHWWHHH'
然后最后一个wotking日是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。 提前谢谢!
答案 0 :(得分: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
答案 1 :(得分:1)
试试这个:
<强>的MySQL 强>
@month_col = 'HHWHHWHWWWHHWWWWWHHWWWWWHHWWHHH'
从字符串
开始找到字符SELECT LOCATE('W', @month_col);
输出: 3
从字符串末尾找到字符
SELECT LENGTH(@month_col) + 1 - LOCATE('W', REVERSE(@month_col));
输出: 28
SQL SERVER
@month_col = 'HHWHHWHWWWHHWWWWWHHWWWWWHHWWHHH'
从字符串
开始找到字符SELECT CHARINDEX('W', @month_col, 0);
输出: 3
从字符串末尾找到字符
SELECT LEN(@month_col) + 1 - CHARINDEX('W', REVERSE(@month_col), 0);
输出: 28
答案 2 :(得分:1)
- 试试这个
Select CHARINDEX('W', 'HHWHHWHWWWHHWWWWWHHWWWWWHHWWWWW') AS FirstWorkingDay,
LEN('HHWHHWHWWWHHWWWWWHHWWWWWHHWWWWW') - CHARINDEX('W', REVERSE('HHWHHWHWWWHHWWWWWHHWWWWWHHWWWWW')) -1 AS LastWorkingDay