背景
スペースで区切られた最大 5 つの異なる時刻を含むことができる文字列があります。文字列は、バックエンド データベースのフィールドをデータ ウェアハウス (SQL Server 2008 R2) にエクスポートしたものです。
Back end database -> Data warehouse string
[LF] = line feed code
+========+================+
|Company |SLA_Times |
+========+================+
|ABC01 | | -> NULL
+--------+----------------+
|DEF01 |00:30:00[LF] |
| |[LF] | -> '00:30:00 1 08:00:00'
| |1 08:00:00 |
+--------+----------------+
|GHI01 |00:15:00[LF] |
| |01:00:00[LF] |
| |01:00:00[LF] | -> '00:15:00 01:00:00 01:00:00 04:00:00 08:00:00'
| |04:00:00[LF] |
| |08:00:00 |
+--------+----------------+
|JKL01 |08:00:00[LF] |
| |21:00:00[LF] |
| |4 09:00:00[LF] | -> '08:00:00 21:00:00 4 09:00:00 10 00:00:00 100 00:00:00'
| |10 00:00:00[LF] |
| |100 00:00:00 |
+--------+----------------+
|MNO01 |[LF] |
| |[LF] | -> ' 16:00:00'
| |[LF] |
| |16:00:00 |
+--------+----------------+
画像を投稿することは許可されていなかったため、上記のコードを作成する必要がありました。次の写真を含めるつもりだったので、物事をより明確に理解するのに役立つかもしれません:
SLA_TIMES フィールドには、改行で区切られた最大 5 つの時間インジケータが含まれます。フィールド内の時間の順序は、SLA 時間を設定できる 5 つの優先順位 (1 ~ 5) に対応しています。もちろん、この順序は文字列に反映されます。ご覧のとおり、SLA_TIMES フィールドの改行はスペースに変換されます。
毎回のインジケーターは、次の 2 つの方法で表示できます。
- 時間の部分のみ、または
- 自然な日の部分と時間の部分がスペースで区切られています。
このような:
'00:30:00' indicates 30 minutes
'4 09:00:00' indicates 4 natural days (4 x 24 hours) plus 9 hours (total 105 hours)
データベースで見た自然日数の最大数は 9999 ですが、将来何を入力するかは誰にもわかりません。;-)
私がする必要がある目標
:
- 文字列から時間インジケーターを抽出します。たとえば、「00:30:00 02:00:00 2 16:00:00」とします。
- それらを分に変換し、
- @SLA_1 から @SLA_5 という名前の 5 つの変数に配置します。
文字列に時間が設定されていない場合 (または文字列がなく、フィールドが NULL の場合)、変数では 0 に設定されます。(その場合、デフォルトの SLA 時間が使用されます。)
たとえば、上の画像の会社 ABC01 の場合、値は次のようになります。
@SLA_1 = 0
@SLA_2 = 0
@SLA_3 = 0
@SLA_4 = 0
@SLA_5 = 0
会社 DEF01 の場合、値は次のようになります。
@SLA_1 = 30
@SLA_2 = 0
@SLA_3 = 1920
@SLA_4 = 0
@SLA_5 = 0
会社 GHI01 の場合、値は次のようになります。
@SLA_1 = 15
@SLA_2 = 60
@SLA_3 = 60
@SLA_4 = 240
@SLA_5 = 480
会社 JKL01 の場合、値は次のようになります。
@SLA_1 = 480
@SLA_2 = 1260
@SLA_3 = 6300
@SLA_4 = 14400
@SLA_5 = 144000
会社 MNO01 の場合、値は次のようになります。
@SLA_1 = 0
@SLA_2 = 0
@SLA_3 = 0
@SLA_4 = 960
@SLA_5 = 0
変数は、SLA 時間をチケットのターンアラウンド タイムと比較するために使用されます。
文字列の例は次のとおりです。
'00:30:00 1 08:00:00'
'00:15:00 01:00:00 01:00:00 04:00:00 08:00:00'
'08:00:00 21:00:00 4 09:00:00 10 00:00:00 100 00:00:00'
' 16:00:00'
'00:30:00 02:00:00 2 16:00:00'
'1 00:00:00 2 00:00:00 4 00:00:00 16 00:00:00 32 00:00:00'
' 02:00:00 9999 08:00:00'
これまでに行った手順
現在、私は SQL にそれほど精通しておらず、これを達成する方法についてほぼ 1 週間頭を悩ませてきました。CHARINDEX と SUBSTRING を使用して何かを考え出そうとしましたが、頭を悩ませることができませんでした。時間を分に変換する方法を知っています
SELECT DATEDIFF(minute,'00:00:00','03:00:00')
しかし、それは私をそれほど遠くまで連れて行ってくれませんでした。
どんな助けでも大歓迎です!!