从t-sql的末尾获取字符串中char的第一个出现的索引

时间:2014-01-23 09:42:19

标签: mysql sql-server select locate charindex

我很感激任何帮助

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

 @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。 提前谢谢!

3 个答案:

答案 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