時間を分に変換する正規表現を作成しようとしています。 現在、ドットの前の時間数とドットの後の分数を与える値があります。たとえば、6.10は6時間10分です。SQLで時間を数分に変換する
正規表現を使用してドットの前に値を探し、60分(分を得る)を掛けてからドットの後に値を追加することはできますか?
だからだろう、前に使用例のよう: (6 * 60)+ 10
ありがとうございます!あなたの値「6.10」が文字列として格納されている場合
時間を分に変換する正規表現を作成しようとしています。 現在、ドットの前の時間数とドットの後の分数を与える値があります。たとえば、6.10は6時間10分です。SQLで時間を数分に変換する
正規表現を使用してドットの前に値を探し、60分(分を得る)を掛けてからドットの後に値を追加することはできますか?
だからだろう、前に使用例のよう: (6 * 60)+ 10
ありがとうございます!あなたの値「6.10」が文字列として格納されている場合
正規表現は、このような単純な文字列操作のためにおそらく過剰です。必要なのは、ドットとSUBSTR関数の位置を取得するINDEX関数だけで時間と分を得ることです。
ドット位置:
select INDEX([yourstring], '.')
時間(ドットの前):
select SUBSTR([yourstring], 1, INDEX([yourstring], '.') - 1)
分(ドットの後):
select SUBSTR([yourstring], INDEX([yourstring], '.') + 1)
ありがとうございました! – user7172167
あなたは大歓迎です!これがあなたの後であった場合は、回答を受け入れてください。 – under
間違いなく、どうすればいいですか?申し訳ありません、私はこのフォーラムで非常に新しいです! – user7172167
、最初の数に変換します
SET @Input = CAST(@InputString AS FLOAT)
はその後、
Modulusと
Floorを使用しています。
合計分は=小数部* 100 +整数部分*あなたの価値6.10
が@Inputという名前の変数に格納されている場合
60だから、あなたはあなたが
と希望値を得ることができますそれが表にあります場合は、より多くのこのようなものが適切であろう:分はゼロパディングされ、例えばある場合
SELECT (Input % 1) * 100 + FLOOR(Input, 0) * 60 Output
FROM Table
上記のみ動作します6時間5分= 6.05。パディングなしで分を表す場合(6時間5分= 6.5)、underが提案する方法を使用します。
'ROUND'、より良い' TRUNC'や 'CAST(AS INT)'をしないでください。 '6.55'であなたのアプローチを試してください:) – dnoeth
文字列をトークン化するSTRTOK
機能がありますそれだけです:
select '12.34' as x,
cast(strtok(x,'.',1) as int) * 60 + cast(strtok(x,'.',2) as int)
私はTeradataの正規表現を使用していませんでした。正規表現は文字列内のものを見つけます。彼らは計算をしません。あなたは値を抽出し、それを別々に行う必要があります。 –
どうすればいいですか?私はDATEPART(hh、field)を使ってみましたが、hhが定義済みの型名であるというエラーメッセージが返されます。ありがとうございます – user7172167
検索しているフィールドのデータ型は何ですか? –