Abfragesprache SQL

Für eine Abfrage aus der HISTVAL- und ALERT-Tabellen über den OLE DB-Provider gilt die Abfragesprache SQL als Basis:

  • Nur lesende Abfragen (SELECT)

  • Einfache SQL-Syntax (keine Joins, Subselects und Intersects oder Unions)

  • Nur "neutralsprachliche" Abfragen sind erlaubt

  • Wildcards auch bei DP-Namen (auch hierarchisch)

  • Erweiterung der Zeitabfragen auf Millisekunden

  • Sammelmeldungen, die mehrere Einzelmeldungen mehrerer Meldebehandlungen zusammenfassen, sind erlaubt (ALERTS-tabelle).

Unterstützte SQL Befehle

Befehl Bedeutung
SELECT FROM WHERE

Auswahl von Spalten aus Tabellen, die bestimmte Bedingungen erfüllen.

Hinweis: Innerhalb von SELECT Abfragen sind nur * oder Spaltennamen erlaubt, keine Ausdrücke.

AS Erlaubt die Angabe einer Spaltenüberschrift.
AND UND-Verknüpfungen von Bedingungen.
OR ODER-Verknüpfungen von Bedingungen.
NOT Negation von Bedingungen.
( ) Klammerung in Bedingungen.
IN Auswahl aus Liste.
BETWEEN (AND) Alle zwischen 2 Werten.
LIKE Vergleich mit Wildcards.
NOT LIKE Negation eines Vergleichs mit Wildcards.
GROUP BY Zusammenfassung von assoziierten Reihen.
SUM Summe über alle Zeilen, die mit GROUP BY selektiert wurden.
MIN Minimum über alle Zeilen, die mit GROUP BY selektiert wurden.
MAX Maximum über alle Zeilen, die mit GROUP BY selektiert wurden.
COUNT Zähle alle Zeilen, die mit GROUP BY selektiert wurden.
AVG Durchschnitt über alle Zeilen, die mit GROUP BY selektiert wurden
ORDER BY (DESC) Ergebniszeilen sortieren (absteigend)

Unterstützte Operatoren

Operator Bedeutung
= Gleich
< Kleiner
> Größer
<> Ungleich
<= Kleiner oder gleich
>= Größer oder gleich
+ Addition
- Subtraktion
* Multiplikation
/ Division
|| Strings verbinden
IS NULL Abfrage, ob Spalteninhalt undefiniert
? : Fragezeichen-Operator (nur bei Spaltenselektion erlaubt)

SQL-Funktionen

Funktion Bedeutung
STR(x) Konvertiert x in einen String
INT(X) Konvertiert x in ein Integer
FLOAT(X) Konvertiert x in ein Float
STR2DATETIME(s,f) Konvertiert s (string) in ein DBTYPE_DATE. f gibt das Datumsformat an
DATETIME2STR(d,f) Konvertiert d (DBTYPE_DATE) in einen String. f gibt das gewünschte Datumsformat an

Tipps und Tricks

Machen Sie sich auch mit dem Kapitel SQL der Online-Hilfe vertraut!

  • Bei den beiden Datumsfunktionen ist die Formatangabe optional. Standardmäßig wird das Default-Format verwendet: "jjjj.mm.dd hh:mm:ss.mmm", z.B. "2001.04.22 12:11:31.000"

  • Der Formatstring kann die Parameter enthalten, die auch in der Funktion strftime() des ANSI-Standards von C vorkommen können:

    Funktion Bedeutung
    %a abgekürzter Name des Wochentages
    %A voller Name des Wochentages
    %b abgekürzter Name des Monats
    %B voller Name des Monats
    %c lokale Darstellung von Datum und Zeit
    %d Tag im Monat(01-31)
    %H Stunde (00-23)
    %I Stunde (00-12)
    %j Tag im Jahr (001-366)
    %m Monat (01-12)
    %M Minute (00-59)
    %p lokales Äquivalent von AM(Vormittag) und PM(Nachmittag)
    %S Sekunde (00-59)
    %U Woche im Jahr (Sonntag ist erster Wochentag) (00-53)
    %w Wochentag (0-6, Sonntag ist 0)
    %W Woche im Jahr (Montag ist erster Wochentag, 00-53)
    %x lokale Darstellung des Datums
    %X lokale Darstellung der Zeit
    %y Jahr ohne Jahrhundert (00-99)
    %Y Jahr mit Jahrhundert
    %Z Name der Zeitzone
    %% %
  • Strings können sowohl mit einfachem (')als auch mit doppeltem Hochkomma (") begrenzt sein. Durch Voranstellen eines Backslash vor einem Sonderzeichen (also einem Stringbegrenzer oder einem Wildcard) wird dessen Bedeutung aufgehoben. Zwei Backslash ergeben den Backslash selbst als Zeichen.

  • Bei der Angabe von Wildcards in der Abfrage kann sowohl die SQL- ("%" steht für beliebige Zeichen, "_" für ein beliebiges Zeichen) als auch die WinCC OA Syntax ("*" steht für beliebige Zeichen, "?" für ein beliebiges Zeichen) verwendet werden (siehe auch Config-Eintrag usePvssWildCards im Kapitel Einträge in der Konfigurationsdatei). Defaultmäßig wird die WinCC OA Syntax verwendet, die sinnvoller ist, weil der "_" häufig als Zeichen in Datenpunktnamen verwendet wird, und in der SQL-Syntax jedem Vorkommen ein "/" vorangestellt werden müsste.

  • Kommt die Quellzeit in einer Bedingung vor, dann wird hier ausnahmsweise die Bedeutung des Gleichheitsoperators modifiziert. Es werden nämlich die Werte zurückgegeben, die zu diesem Zeitpunkt gültig waren. Diese müssen aber nicht zu diesem Zeitpunkt generiert worden sein und können daher eine frühere Quellzeit in der Datenbank haben.

Beispiel

SELECT ORIGINALVALUE, QTIME FROM HISTVAL WHERE STIME = "2001.05.01 10:30:00.000"

kann 5 "2001.05.01 10:25:55:910" zurückliefern, wenn das der letzte Eintrag vor 10:30 war. Diese Ausnahme bezieht sich nur auf die Quellzeit in der WHERE-Klausel.

Nicht unterstützte SQL-Schlüsselwörter

CREATE (DLL)

CREATE (DML)

CLOSE DATABASE

COMMIT

CONNECT

CONNECT BY PRIOR

CRINSTAB

DELETE FROM

DISTINCT

DROP

EXISTS

GRANT

HAVING

INNER JOIN

INSERT

INTERSECT

INTO TEMP

LEFT JOIN

RENAME

RESOURCE

REVOKE

RIGHT JOIN

SET AUTOCOMMIT

START WITH

UNION

UPDATE SET