0

チェックインとチェックアウトstringのために次のパターンを解析するのに助けが必要ですdatedateSQL

'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()の3番目の引数は長さであり、オフセットではありません。これを試して:

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 に答える