2017-11-03 3 views
0

時刻に関連する値を格納するnvarcharフィールドがあります。T-SQL:nvarcharからhh:mm:ss

eg 
104:45:50 (104 hrs, 45 mins, 50 secs). 

これを計算のための実行可能な/使用可能なフィールドに変換する方法についての提案はありますか?

SQL 'time'は最大23:59:59までのみ可能で、したがってnvarcharとして格納します。

事前に感謝します。

+0

フィールド値も99:45:50(99時間、45分、50秒)になる可能性があります.2または3桁の時間です。 – BigIWT

+0

"_a実行可能/使用可能な計算フィールド_"どのような計算ですか?あなたは 'int'として保存し、その時間に入る秒数を格納することができます。 – Ivar

+2

時間/分/秒の数を表す数値型として保存します。 [h]:mm:ss形式のものを格納するのはまったく問題ありません(もちろん、後でアプリケーションやレポートに変換することもできます) –

答えて

0

文字列データ型は数値情報には適していません。この場合、秒単位で処理するとh:m:s単位に出力することができますが、その逆は醜い問題です。

SQL Fiddle

MS SQL Serverの2014スキーマのセットアップ:1

CREATE TABLE Table1 
    ([badcolumn] varchar(9), [num_secs] int) 
; 

INSERT INTO Table1 
    ([badcolumn]) 
VALUES 
    ('104:45:50'), 
    ('99:45:50') 
; 

問合せ:

select 
    badcolumn, (h*3600)+(m*60)+s as num_seconds 
from table1 
cross apply (
    select 
     charindex(':',badcolumn) x 
    , charindex(':',badcolumn, charindex(':',badcolumn)+1) y 
) ca1 
cross apply (
    select 
     try_cast(substring(badcolumn,1,x-1) as int) h 
    , try_cast(substring(badcolumn,x+1,y-x-1) as int) m 
    , try_cast(substring(badcolumn,y+1,20) as int) s 
) ca2 

Results

| badcolumn | num_seconds | 
|-----------|-------------| 
| 104:45:50 |  377150 | 
| 99:45:50 |  359150 | 
+0

あなたの質問は今解決されましたか?あなたはまだこの答えについて質問がありますか? [help/accepting](https://stackoverflow.com/help/someone-answers)の詳細については、[** Click The Tick **](https://ibb.co/ikqyO6) –

関連する問題