Mam datatable Exasol z kolumną, która wygląda tak:

2016-10-25 08:01:36.0    
2016-10-25 08:30:09.0    
2016-10-25 09:00:15.0    
2016-10-26 08:02:38.0    
2016-10-26 10:00:44.0    
2016-10-27 10:00:44.0

DATATYPE tej kolumny jest znacznik czasu. Teraz chcę określić zapytanie SQL, które pokazuje mi wszystkie rzędy, gdzie czas jest jak przed godziną 12:00:00. Bez względu na datę jest (tylko sprawy czasowe) i oddziel je od tych po godzinie 12:00. (Byłoby miło, gdybym mógł nawet powiedzieć coś takiego jak "od 8 do 12" i '12 do 18 ').

Oświadczenia takie jak:

SELECT * FROM MySCHEMA.MyTable WHERE entryTime < '%12:00:00.%';
SELECT * FROM MySCHEMA.MyTable WHERE entryTime BETWEEN '%08:00:00.%' AND '%12:00:00.%';

Nie działają. Otrzymuję komunikat o błędzie:

"Wyjątek danych - nieprawidłowa wartość dla tokena w YYYY FORMAT; Wartość: "% 12: 00: 00.%" Format: "YYYY-MM-DD HH24: MI: SS.FF6"

Czy istnieje sposób, aby to rozwiązać, więc mogę wybrać okres czasu bez względu na datę?

0
BlainTheMono 16 luty 2017, 14:28

2 odpowiedzi

Najlepsza odpowiedź

Instrukcja wyboru Exasol musi wyglądać tak:

SELECT * FROM MySCHEMA.MyTable WHERE EXTRACT(HOUR FROM entryTime ) BETWEEN 8 and 10;

Jest to odpowiednik stwierdzenia (...).

Takim innym przykładem, w którym jest druga, gdzie klauzula może wyglądać tak:

SELECT * FROM MySCHEMA.MyTable WHERE myNames LIKE 'Sam%' AND EXTRACT(HOUR FROM entryTime ) BETWEEN 8 and 10;

Rezultatem byłby stół osób / rzeczy z MyNames takimi jak Sam ... (Samantha, Samuel, Samira ....) oraz z wejściami między 08: 00: 00.0000 i 10: 59: 59.9999 Bez względu na to, co jest .

0
BlainTheMono 16 luty 2017, 13:53

Tylko to samo rozwiązanie, takie jak przy użyciu wyodrębniania () funkcji z parametrem wejściowym godzinnym, możesz użyć funkcji godzin () w następujący sposób

SELECT * FROM EXA_DBA_AUDIT_SQL WHERE HOUR(START_TIME) BETWEEN 8 and 9; -- up to 9:59:59
0
Eralper 22 luty 2020, 14:48