我感谢任何帮助
我有一个代表工作日和几天休息一个月的字符串:
@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
那么,最后一个呢?我试图迭代但无效。预先感谢!
反向字符串。
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
- 尝试此
Select CHARINDEX('W', 'HHWHHWHWWWHHWWWWWHHWWWWWHHWWWWW') AS FirstWorkingDay,
LEN('HHWHHWHWWWHHWWWWWHHWWWWWHHWWWWW') - CHARINDEX('W', REVERSE('HHWHHWHWWWHHWWWWWHHWWWWWHHWWWWW')) -1 AS LastWorkingDay
尝试以下:
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