0

我需要帮助解析string以下模式以进行签入date和签dateSQL

'CheckIn: Thursday, April 05, 2012
CheckOut: Saturday, April 07, 2012'

我试过了

select 
SUBSTRING([stringToParse], CHARINDEX('Checkin: ', [stringToParse])+9, charindex('<',stringToParse)) as checkin_date,
SUBSTRING([stringToParse], CHARINDEX('CheckOut: ', [stringToParse])+10, LEN([stringToParse])) as checkout_date from xyztable

这适用于结帐日期,但是当我使用类似的方法parse签入时,它会返回

'Thursday, April 05, 2012
Chec'

我需要解析签入date

4

3 回答 3

0

在 SQL Server 中,语法是

SUBSTRING ( expression ,start , length )

因此,您需要从长度中减去一开始要使用的 9 个字符,以获得正确的结果。

于 2012-08-13T17:53:06.280 回答
0

substring() 的第三个参数是长度,而不是偏移量。尝试这个:

select  SUBSTRING([stringToParse], CHARINDEX('Checkin: ', [stringToParse])+9, charindex('< br/>',stringToParse)-11) as checkin_date,
        SUBSTRING([stringToParse], CHARINDEX('CheckOut: ', [stringToParse])+10, LEN([stringToParse])) as checkout_date
from (select 'CheckIn: Thursday, April 05, 2012 < br/>CheckOut: Saturday, April 07, 2012' as stringtoparse
     ) t
于 2012-08-13T17:53:30.527 回答
0

有时它可以帮助我使用 len(string) 而不是替换长度值,并在它自己的行上分解每个参数。

select 
SUBSTRING
(
    stringToParse, -- string
    CharIndex('CheckIn: ', stringToParse) + LEN('CheckIn: '), -- Start
    charindex('< br/>',stringToParse) - /*You want the position of the < br/> MINUS the position of the end of the CheckIn: */(CharIndex('CheckIn: ', stringToParse) + LEN('CheckIn: ')) -- # of characters
) as checkin_date
,
SUBSTRING
(
    stringToParse, 
    CHARINDEX('CheckOut: ', stringToParse)+10, 
    LEN(stringToParse)
) as checkout_date 
于 2012-08-13T18:01:46.423 回答