2016-11-23 8 views
4

Ich versuche, einen regulären Ausdruck zu schreiben, der die Stunden in Minuten umwandelt. Derzeit habe ich einen Wert, der mir die Anzahl der Stunden vor dem Punkt und die Anzahl der Minuten nach dem Punkt gibt, zum Beispiel 6.10 ist 6 Stunden und 10 Minuten.Konvertieren von Stunden in Minuten in SQL

Kann ich einen regulären Ausdruck verwenden, um nach dem Wert vor dem Punkt zu suchen und ihn mit 60 multiplizieren (um Minuten zu erhalten) und dann den Wert nach dem Punkt hinzufügen (der bereits in Minuten ist)?

So wie pro Beispiel, bevor sie verwendet, würde es tun: (6 * 60) + 10

Thank you!

+0

Ich habe Teradata reguläre Ausdrücke nicht verwendet, aber ..... nein. Reguläre Ausdrücke finden Dinge in Strings. Sie machen keine Calcs. Sie müssen die Werte extrahieren und separat machen. –

+0

Würdest du wissen, wie ich das machen kann? Ich habe versucht, DATEPART (hh, Feld) zu verwenden, aber es gibt eine Fehlermeldung zurück, die besagt, dass hh jetzt ein definierter Typname ist. Danke – user7172167

+1

Was ist der Datentyp des Feldes, das Sie suchen? –

Antwort

1

Reguläre Ausdrücke ist wahrscheinlich ein Overkill für solch eine einfache String-Manipulation. Alles, was Sie brauchen, ist die INDEX-Funktion, um die Position der Punkt- und SUBSTR-Funktion zu erhalten, um Stunden und Minuten zu erhalten.

Dot Position:

select INDEX([yourstring], '.') 

Stunden (vor dem Punkt):

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

Minuten (nach dem Punkt):

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

Vielen Dank !!! – user7172167

+0

Gern geschehen! Bitte akzeptieren Sie die Antwort, wenn Sie das wollten. – under

+0

Definitiv, wie mache ich das? Entschuldigung, ich bin sehr neu in diesem Forum! – user7172167

2

Wenn Ihr Wert "6.10" als String gespeichert wird, wandelt es in eine Reihe zuerst:

SET @Input = CAST(@InputString AS FLOAT) 

Verwenden Sie dann Modulus und Floor.

Gesamt Minuten = Der Bruchteil * 100 + die ganze Zahl Teil * 60.

Also, wenn Ihr Wert 6.10 in einer Variablen namens @Input enthalten ist, dann können Sie den Wert, den Sie mit

wünschen bekommen

wenn es in einer Tabelle ist dann mehr so ​​etwas wie dies angemessen wäre:

SELECT (Input % 1) * 100 + FLOOR(Input, 0) * 60 Output 
FROM Table 

Die oben funktioniert nur, wenn Minuten mit Nullen aufgefüllt sind, zB 6 Stunden 5 Minuten = 6.05. Wenn Sie stattdessen Minuten ohne Auffüllung darstellen (6 Stunden, 5 Minuten = 6,5), verwenden Sie die Methode, die under vorschlägt.

+0

Nicht 'ROUND', besser' TRUNC' oder 'CAST (AS INT)'. Versuchen Sie Ihren Ansatz auf '6,55 :) – dnoeth

2

Es gibt eine STRTOK Funktion eine Zeichenfolge tokenize und dann ist es nur:

select '12.34' as x, 
    cast(strtok(x,'.',1) as int) * 60 + cast(strtok(x,'.',2) as int) 
Verwandte Themen