2016-11-23 118 views
4

時間を分に変換する正規表現を作成しようとしています。 現在、ドットの前の時間数とドットの後の分数を与える値があります。たとえば、6.10は6時間10分です。SQLで時間を数分に変換する

正規表現を使用してドットの前に値を探し、60分(分を得る)を掛けてからドットの後に値を追加することはできますか?

だからだろう、前に使用例のよう: (6 * 60)+ 10

ありがとうございます!あなたの値「6.10」が文字列として格納されている場合

+0

私はTeradataの正規表現を使用していませんでした。正規表現は文字列内のものを見つけます。彼らは計算をしません。あなたは値を抽出し、それを別々に行う必要があります。 –

+0

どうすればいいですか?私はDATEPART(hh、field)を使ってみましたが、hhが定義済みの型名であるというエラーメッセージが返されます。ありがとうございます – user7172167

+1

検索しているフィールドのデータ型は何ですか? –

答えて

1

正規表現は、このような単純な文字列操作のためにおそらく過剰です。必要なのは、ドットとSUBSTR関数の位置を取得するINDEX関数だけで時間と分を得ることです。

ドット位置:

select INDEX([yourstring], '.') 

時間(ドットの前):

select SUBSTR([yourstring], 1, INDEX([yourstring], '.') - 1) 

分(ドットの後):

select SUBSTR([yourstring], INDEX([yourstring], '.') + 1) 
+0

ありがとうございました! – user7172167

+0

あなたは大歓迎です!これがあなたの後であった場合は、回答を受け入れてください。 – under

+0

間違いなく、どうすればいいですか?申し訳ありません、私はこのフォーラムで非常に新しいです! – user7172167

2

、最初の数に変換します

SET @Input = CAST(@InputString AS FLOAT) 

はその後、 ModulusFloorを使用しています。

合計分は=小数部* 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が提案する方法を使用します。

+0

'ROUND'、より良い' TRUNC'や 'CAST(AS INT)'をしないでください。 '6.55'であなたのアプローチを試してください:) – dnoeth

2

文字列をトークン化するSTRTOK機能がありますそれだけです:

select '12.34' as x, 
    cast(strtok(x,'.',1) as int) * 60 + cast(strtok(x,'.',2) as int) 
関連する問題