0

これは私の変数です

 declare @fecha varchar(50)
 set @fecha='29:14:2'
 select 
horas= CONVERT(int,SUBSTRING (@fecha,1,
 charindex(':',@fecha)-1))

**@fecha はこの形式にすることができます

set @fecha='9:4:2' or set @fecha='29:59:59'

最も単純な選択で時間= 24、分= 14、秒= 2を取得する必要があります

ご覧のとおり、時間しか取得できませんでしたが、他の2つは混乱しています:s

最初のインデックスを再度取得する必要があることはわかっています:他のものまで:なので、分を取得できましたが、彼は私にとって混乱し、「4:」、「:」、「:1」の変換エラーのみが発生しました

4

3 に答える 3

0

charindexどこから検索するかの開始位置を与えることができます

構文

CHARINDEX ( 検索する式 ,検索する式 [ , 開始場所 ] )

したがって、最初のコロンの位置を保存:し、2 番目のコロンの 1 文字を後で開始できます。

declare @fecha varchar(50) = '29:14:2'
declare @pos1 int = charindex(':', @fecha)
declare @pos2 int = charindex(':', @fecha, @pos1 + 1)
select horas = CONVERT(int, SUBSTRING(@fecha,1, @pos1 - 1)),
       minutas = CONVERT(int, SUBSTRING(@fecha, @pos1 + 1, @pos2 - @pos1 - 1))

SQLフィドル

于 2014-06-06T23:13:05.347 に答える
0

これはそれを行います:

declare @time varchar(32) = '29:14:2'

select hh = convert(int,
              left( @time ,
                charindex(':',@time)
                - 1
              )
            ) ,
       mm = convert(int,
              left(            right(@time,len(@time)-charindex(':',@time))   ,
                charindex(':', right(@time,len(@time)-charindex(':',@time)) )
                - 1
              )
            ) ,
       ss = convert(int ,
              right(               right(@time,len(@time)-charindex(':',@time) )   ,
                len(               right(@time,len(@time)-charindex(':',@time) ) )
                - charindex( ':' , right(@time,len(@time)-charindex(':',@time) ) )
              )
            )

そして、データがクリーンでない場合(その場合) は、ほぼ確実に壊れます。

于 2014-06-06T23:28:14.120 に答える
0

最初に変数のコロンのインデックスを選択し、それに基づいて文字列の解析を実行することをお勧めします。SSMS で使用した未加工のコードは次のとおりです。

declare @fecha varchar(30)
set @fecha='9:4:2'
select
      cast(substring(@fecha, 1, HourLimiter - 1) as INT)
    , cast(substring(@fecha, HourLimiter + 1, MinuteLimiter - HourLimiter - 1) as INT)
    , cast(substring(@fecha, MinuteLimiter + 1, len(@fecha) - MinuteLimiter) as INT)
from (
    select
          charindex(':', @fecha) AS HourLimiter
        , charindex(':', @fecha, charindex(':', @fecha)+1) AS MinuteLimiter
    ) t
set @fecha='29:59:59'
select
      cast(substring(@fecha, 1, HourLimiter - 1) as INT)
    , cast(substring(@fecha, HourLimiter + 1, MinuteLimiter - HourLimiter - 1) as INT)
    , cast(substring(@fecha, MinuteLimiter + 1, len(@fecha) - MinuteLimiter) as INT)
from (
    select
          charindex(':', @fecha) AS HourLimiter
        , charindex(':', @fecha, charindex(':', @fecha)+1) AS MinuteLimiter
    ) t

SQLFiddleにもテーブルベースのソリューションがあります。

于 2014-06-06T23:26:01.040 に答える