Download as pdf or txt
Download as pdf or txt
You are on page 1of 69

SQL Leksykon kieszonkowy Wydanie II

2nd Edition Jonathan Gennick


Visit to download the full and correct content document:
https://ebookstep.com/product/sql-leksykon-kieszonkowy-wydanie-ii-2nd-edition-jonat
han-gennick/
More products digital (pdf, epub, mobi) instant
download maybe you interests ...

Opus magnum C 11 Programowanie w j■zyku C Wydanie II


poprawione 2nd Edition Gr■bosz Jerzy

https://ebookstep.com/product/opus-magnum-c-11-programowanie-w-
jezyku-c-wydanie-ii-poprawione-2nd-edition-grebosz-jerzy/

Buddhismus 2nd Edition Jonathan Landaw

https://ebookstep.com/product/buddhismus-2nd-edition-jonathan-
landaw/

Sefiller Cilt II 2nd Edition Victor Hugo

https://ebookstep.com/product/sefiller-cilt-ii-2nd-edition-
victor-hugo/

Caput Mundi II edizione 2nd Edition Gioachino Ventura

https://ebookstep.com/product/caput-mundi-ii-edizione-2nd-
edition-gioachino-ventura/
Sztuka wojny Wydanie III 3rd Edition Sun Pin Authors
Sun Tzu

https://ebookstep.com/product/sztuka-wojny-wydanie-iii-3rd-
edition-sun-pin-authors-sun-tzu/

■■■■■■ ■ MySQL MS SQL Server ■ Oracle ■ ■■■■■■■■


■■■■■■■■■■■■ ■■■■■■■ 2nd Edition ■■■■■■■ ■.C.

https://ebookstep.com/download/ebook-33354452/

SQL ■■■ ■■■■■■■■ 9th Edition ■■■■■ ■■■■■■

https://ebookstep.com/download/ebook-36089128/

Einstieg in SQL 3rd Edition Michael Laube

https://ebookstep.com/product/einstieg-in-sql-3rd-edition-
michael-laube-2/

Einstieg in SQL 3rd Edition Michael Laube

https://ebookstep.com/product/einstieg-in-sql-3rd-edition-
michael-laube/
Tytuł oryginału: SQL Pocket Guide

Tłumaczenie: Marek Pałczyński

ISBN: 978-83-246-4975-4

© Helion 2011

Authorized Polish translation of the English edition of SQL Pocket Guide 3rd Edition ISBN
9781449394097 © 2011 Jonathan Gennick.
This translation is published and sold by permission of O'Reilly Media Inc. the owner of all
rights to publish and sell the same.

All rights reserved. No part of this book may be reproduced or transmitted in any form or by
any means electronic or mechanical including photocopying recording or by any information
storage retrieval system without permission from the Publisher.

Wszelkie prawa zastrzeżone. Nieautoryzowane rozpowszechnianie całości lub fragmentu


niniejszej publikacji w jakiejkolwiek postaci jest zabronione. Wykonywanie kopii metodą
kserograficzną fotograficzną a także kopiowanie książki na nośniku filmowym magnetycznym
lub innym powoduje naruszenie praw autorskich niniejszej publikacji.

Wszystkie znaki występujące w tekście są zastrzeżonymi znakami firmowymi bądź


towarowymi ich właścicieli.

Autor oraz Wydawnictwo HELION dołożyli wszelkich starań by zawarte w tej książce
informacje były kompletne i rzetelne. Nie biorą jednak żadnej odpowiedzialności ani za ich
wykorzystanie ani za związane z tym ewentualne naruszenie praw patentowych lub autorskich.
Autor oraz Wydawnictwo HELION nie ponoszą również żadnej odpowiedzialności za ewentualne
szkody wynikłe z wykorzystania informacji zawartych w książce.

Wydawnictwo HELION
ul. Kościuszki 1c 44-100 GLIWICE
tel. 32 231 22 19 32 230 98 63
e-mail: helion@helion.pl
WWW: http://helion.pl (księgarnia internetowa katalog książek)

Drogi Czytelniku!
Jeżeli chcesz ocenić tę książkę zajrzyj pod adres
http://helion.pl/user/opinie?sqllk2_ebook
Możesz tam wpisać swoje uwagi spostrzeżenia recenzję.

Pliki z przykładami omawianymi w książce można znaleźć pod adresem:


ftp://ftp.helion.pl/przyklady/sqllk2.zip

Printed in Poland.

• Poleć książkę na Facebook.com • Księgarnia internetowa

• Kup w wersji papierowej • Lubię to! » Nasza społeczność

• Oceń książkę
Spis treści

Wprowadzenie 5
Funkcje analityczne 10
Wyrażenia CASE — proste wyrażenia 10
Wyrażenia CASE — przeszukiwane wyrażenia 10
Funkcja CAST 11
Zapytania CONNECT BY 12
Konwersje typów danych 19
Typy danych — liczby całkowite (wartości binarne) 20
Typy danych — ciągi znaków 20
Typy danych — data i czas 21
Typy danych — liczby rzeczywiste 25
Konwersja daty i czasu — DB2 27
Konwersja daty i czasu — MySQL 30
Konwersja daty i czasu — Oracle 36
Konwersja daty i czasu — PostgreSQL 40
Konwersja daty i czasu — SQL Server 43
Funkcje operujące datami i czasem — DB2 47
Funkcje operujące datami i czasem — MySQL 48
Funkcje operujące datami i czasem — Oracle 50
Funkcje operujące datami i czasem — PostgreSQL 54
Funkcje operujące datami i czasem — SQLServer 56
Usuwanie danych 59
Funkcja EXTRACT 64
Funkcja GREATEST 64
Funkcje grupowania i sumowania 65

3
Zapytania hierarchiczne 76
Indeksy — tworzenie 81
Indeksy — usuwanie 82
Wprowadzanie danych 83
Złączanie tabel 89
Funkcja LEAST 101
Literały 101
Scalanie danych 106
Wartości NULL 108
Konwersja wartości liczbowych — DB2 113
Konwersja wartości liczbowych — MySQL 115
Konwersja wartości liczbowych — Oracle 116
Konwersja wartości liczbowych — PostgreSQL 118
Konwersja wartości liczbowych — SQL Server 120
Funkcje liczbowe i matematyczne 121
Funkcje OLAP 124
Transpozycja tabel 124
Predykaty 133
Zapytania rekurencyjne 137
Wyrażenia regularne 138
Pobieranie danych 150
Funkcje tekstowe 162
Podzapytania 169
Tabele — tworzenie 174
Tabele — usuwanie 179
Tabele — modyfikacja 180
Zarządzanie transakcjami 186
Unie 196
Uaktualnianie danych 203
Funkcje okienkowe 209
Skorowidz 218

4 | Sp s treśc
SQL
Leksykon kieszonkowy

Wprowadzenie
Niniejsza książka jest próbą zgromadzenia najważniejszych in-
formacji na temat języka SQL w formie podręcznego leksykonu.
Zawiera opis najczęściej stosowanych instrukcji takich systemów
bazodanowych, jak IBM DB2 Release 9.7, MySQL 5.1, Oracle
Database 11g Release 2, PostgreSQL 9.0 oraz Microsoft SQL Server
Release 2.
Polecenia przedstawione w dalszej części książki nie są uniwer-
salne i nie we wszystkich bazach danych mają taką samą postać.
Z tego względu prezentacja poszczególnych instrukcji została
poprzedzona informacją, której platformy dotyczą.

Struktura książki
Poszczególne punkty zostały ułożone w kolejności alfabetycznej,
a ich tytuły odpowiadają zadaniom realizowanym za pomocą
języka SQL. Dzięki temu, szukając informacji na temat usuwa-
nia danych, można szybko odnaleźć w spisie treści punkt zatytuło-
wany „Usuwanie danych”, który znajduje się między punktami
„Unie” i „Wartości NULL”.

5
Uwagi dotyczące oprogramowania
W środowisku MySQL konieczne jest zapisywanie znaku otwarcia
nawiasu bezpośrednio za nazwą wywoływanej funkcji. Na przy-
kład wykonanie kodu upper (nazwa) zakończy się wygene-
rowaniem komunikatu o błędzie, ponieważ między słowem upper
i nawiasem (nazwa) znajduje się spacja.

Konwencje typograficzne
W celu wyróżnienia poszczególnych elementów składniowych ję-
zyka SQL w książce tej zastosowane zostały następujące konwencje.
WIELKIE LITERY
Oznaczenie słów kluczowych języka SQL.
małe litery
Oznaczenie elementów instrukcji SQL definiowanych przez
użytkownika.
Czcionka pochylona
Oznaczenie nowych i ważnych terminów technicznych.
Czcionka o stałej szerokości znaków
Oznaczenie fragmentów kodu oraz odniesień do nazw tabel,
nazw kolumn i wyrażeń umieszczonych w tekście opisu.
Pogrubiona czcionka o stałej szerokości znaków
Oznaczenie elementów wprowadzanych przez użytkowni-
ka. Elementy tego typu występują w przykładach kodu.
Pochylona czcionka o stałej szerokości znaków
Oznaczenie elementu, który należy zastąpić odpowiednią
wartością podczas wykonywania instrukcji lub funkcji.
Znaki []
W składni polecenia: oznaczenie elementów opcjonalnych.

6 | SQL. Leksykon k eszonkowy


Znaki {}
Oznaczenie grupy opcji polecenia, z których jedna jest obo-
wiązkowa.
Znak |
Znak rozdzielający opcje polecenia.

Przykładowe dane
Wszystkie instrukcje SQL prezentowane w książce są wykonywa-
ne w odniesieniu do tabel i danych, które można pobrać pod adre-
sem ftp://ftp.helion.pl/przyklady/sqllek2.zip. Relacje między poszcze-
gólnymi tabelami zostały przedstawione na rysunku 1. Informacje
w nich zawarte opisują wodospady Górnego Półwyspu stanu Mi-
chigan. Część prezentowanych przykładów dotyczy tabel, które są
tworzone na podstawie tabel zaprezentowanych na rysunku 1.
Nazwy kolumn kod_lokalizacji, strefa, szerokosc i dlugosc
odpowiadają koordynatom siatki Universal Transverse Mercator
(UTM), wykorzystywanym w mapach topograficznych i urządze-
niach GPS. Więcej informacji na ich temat można znaleźć pod
adresem http://egsc.usgs.gov/isb/pubs/factsheets/fs07701.html.
W niektórych przykładach SQL prezentowanych w książce wy-
korzystywana jest tabela przestawna, która jest po prostu jedno-
kolumnową tabelą o kolejno ponumerowanych wierszach. W tym
przypadku liczba wierszy wynosi 1000.

Wykorzystanie przykładów kodu


Celem niniejszej książki jest ułatwienie czytelnikowi wykonywania
jego obowiązków. Prezentowany kod można zatem wykorzystywać
zarówno we własnych programach, jak i w dokumentacji do nich.
Nie ma potrzeby występowania o zgodę autorów, chyba że znaczne

Wprowadzen e | 7
Rysunek 1. Relacje między tabelami przykładów opisywanych w książce

8 | SQL. Leksykon k eszonkowy


fragmenty kodu będą używane w dystrybuowanych przez czytel-
nika produktach. Na przykład do wykorzystania kilku przykła-
dowych skryptów w opracowywanej aplikacji nie jest konieczne
pozwolenie autorów, ale sprzedawanie lub udostępnianie płyt CD
z przykładami pochodzącymi z książki już takiego pozwolenia
wymaga. Odpowiadanie na pytanie przez cytowanie fragmentów
książki i prezentowanie zawartych w nich skryptów nie wymaga
pozwolenia autorów, ale włączanie obszernych fragmentów kodu
do dokumentacji produktu nie jest dozwolone bez takiej zgody.
Będziemy wdzięczni za zamieszczenie odsyłacza do książki, ale nie
wymagamy tego. Odsyłacz zazwyczaj obejmuje tytuł publikacji,
nazwisko autora, nazwę wydawnictwa oraz numer ISBN — np.
„SQL Leksykon; Jonathan Gennick; Helion; ISBN: 978-83-246-3306-7”.
W przypadku jakichkolwiek wątpliwości, czy sposób wykorzy-
stania kodu wykracza poza opisane ramy, prosimy o kontakt za
pośrednictwem poczty elektronicznej — permissions@oreilly.com.

Podziękowania
Za wsparcie, motywację do pracy i pomoc autor pragnie z głębi
serca podziękować następującym osobom: Grantowi Allenowi,
Donowi Balesowi, Vladimirowi Begunowi, Tugrulowi Bingolowi,
Johnowi Blake’owi, Michelowi Cadotowi, Diasowi Coście, Chrisowi
Date’owi, Brunonowi Denuitowi, Dougowi Doole’owi, Chrisowi
Eatonowi, Stephane’owi Faroultowi, Iggy’emu Fernandezowi,
Bobby’emu Fieldingowi, Donnie, Jenny i Jeffowi Gennickom, K.
Gopalakrishnanowi, Jonah Harrisowi, Johnowi Haydu, Kelvinowi
Ho, Brandowi Huntowi, Kenowi Jacobsowi, Chrisowi Kempste-
rowi, Stephenowi Lee, Peterowi Linsleyowi, Jimowi Meltono-
wi, Anthony’emu Molinaro, Ariemu Mozesowi, Arupowi Nan-
dzie, Tanelowi Poderowi, Tedowi Rexstrew, Brandonowi Richowi,

Wprowadzen e | 9
Serge’owi Rielau, Debby Russell, Andrew i Aronowi Searsom,
Jeffowi Smithowi, Nunowi Souto, Richardowi Swagermanowi,
April Wells oraz Fredowi Zemke.

Funkcje analityczne
Firma Oracle stosuje nazwę funkcja analityczna w odniesieniu do
znanych ze standardu SQL funkcji okienkowych. Więcej informacji
na temat tego niezwykle użytecznego rozwiązania znajduje się
w punkcie „Funkcje okienkowe”.

Wyrażenia CASE — proste wyrażenia


Proste wyrażenia CASE pozwalają na skorelowanie zbioru wartości
ze zbiorem wartości alternatywnych. Oto przykład:
SELECT w.nazwa,
CASE w.publicznie_dostepne
WHEN 't' THEN 'Witaj!'
WHEN 'n' THEN 'Odejdź stąd!'
ELSE 'Błędny kod!'
END AS kolumna_aliasu
FROM wodospady w;

Proste wyrażenia CASE są użyteczne w przypadku, gdy można


bezpośrednio powiązać wartości wejściowe z klauzulami WHEN
za pomocą warunku równości. Jeśli żadna z wartości klauzuli
WHEN nie spełnia kryterium dopasowania i nie została określona
klauzula ELSE, wyrażenie zwraca wartość NULL.

Wyrażenia CASE — przeszukiwane wyrażenia


Przeszukiwane wyrażenia CASE pozwalają na skojarzenie zbioru
alternatywnych wartości wynikowych ze zbiorem warunków typu
TRUE-FALSE. Umożliwiają również uwzględnienie testu IS NULL.
Oto przykład:

10 | SQL. Leksykon k eszonkowy


SELECT w.nazwa,
CASE
WHEN w.publicznie_dostepne = 't' THEN 'Witaj!'
WHEN w.publicznie_dostepne = 'n' THEN 'Odejdź stąd!'
WHEN w.publicznie_dostepne IS NULL THEN 'Null!'
ELSE 'Błędny kod!'
END AS kolumna_aliasu
FROM wodospady w;

Jeśli żadna z wartości klauzuli WHEN nie spełnia kryterium dopaso-


wania i nie została określona klauzula ELSE, wyrażenie zwraca
wartość NULL. Jeżeli spełnione są wyrażenia większej liczby wa-
runków, zwracana jest wartość odpowiadająca pierwszemu do-
pasowaniu.

Funkcja CAST
Funkcja CAST dokonuje jawnej konwersji typów wartości. Oto
przykład:
SELECT * FROM wodospady w
WHERE w.id = CAST('1' AS INTEGER);

W przypadku konwertowania wartości tekstowych na postać licz-


by lub wartości daty funkcja CAST zapewnia niewielką elastycz-
ność w interpretacji różnych formatów danych wejściowych. Na
przykład, jeśli wartość jest ciągiem tekstowym, musi ona odpowia-
dać tekstowej reprezentacji docelowego typu danych, charaktery-
stycznego dla określonej bazy danych.

Uwaga
Większość baz danych oferuje mechanizmy konwersji danych
znacznie bardziej użyteczne niż CAST. Doskonałym przykładem
jest funkcja CONVERT dostępna w systemie SQL Server. Więcej
informacji na ten temat znajduje się w punktach „Konwersja
daty i czasu” oraz „Konwersja wartości liczbowych”.

Funkcja CAST | 11
Zapytania CONNECT BY
Klauzula CONNECT BY jest dostępna w bazie danych Oracle. Umoż-
liwia ona wykonywanie zapytań hierarchicznych. Niemniej osoby
korzystające z oprogramowania Oracle Database 11g Release 2
lub późniejszych jego wersji powinny stosować klauzulę WITH,
która jest zgodna ze składnią zapytań rekurencyjnych proponowa-
ną przez organizację ISO. Więcej informacji na ten temat znajduje
się w punkcie „Zapytania hierarchiczne”.

Uwaga
W celu zachowania zgodności z rozwiązaniami Oracle klauzulę
CONNECT BY zaimplementowano również w bazie danych DB2.
Jej działanie jest jednak ograniczone pod wieloma względami.
Ponadto aby z niej skorzystać, należy włączyć stosowną opcję
za pomocą zmiennej DB2_COMPATIBILITY_VECTOR.

Podstawowa składnia CONNECT BY


Aby pobrać dane określonej struktury, należy wyznaczyć za po-
mocą klauzuli START WITH jej punkt początkowy oraz zdefiniować
zależność rodzic – potomek za pomocą klauzuli CONNECT BY.
SELECT id, nazwa, typ, id_nadrzednej
FROM jedn_terytorialne
START WITH id_nadrzednej IS NULL
CONNECT BY id_nadrzednej = PRIOR id;

ID NAZWA TYP ID_NADRZEDNEJ


----- ---------- -------- -------------
3 Michigan stan
2 Alger hrabstwo 3
1 Munising miasto 2
4 Munising gmina 2
5 Au Train gmina 2
6 Baraga hrabstwo 3
7 Ontonagon hrabstwo 3
8 Interior gmina 7

12 | SQL. Leksykon k eszonkowy


9 Dickinson hrabstwo 3
10 Gogebic hrabstwo 3
11 Delta hrabstwo 3
12 Masonville gmina 11
...

Klauzula START WITH określa pierwszy wiersz (lub pierwsze wier-


sze) wyznaczanego przez bazę danych Oracle drzewa (lub drzew).
W prezentowanym przykładzie istnieje tylko jedno drzewo ze
stanem Michigan na szczycie. Hrabstwo Alger jest jednostką te-
rytorialną stanu Michigan, z kolei gminy Munising i Au Train
wchodzą w skład hrabstwa Alger. W każdym przypadku wartość
id_nadrzednej wskazuje nadrzędną pozycję w zestawieniu.

Warunek START WITH nie musi koniecznie obejmować kolumn


wiążących wiersze nadrzędne z podrzędnymi. Na przykład zasto-
sowanie następującej instrukcji umożliwia wygenerowanie drzew
odnoszących się do każdego hrabstwa:
START WITH typ = 'hrabstwo'

W zapytaniu typu CONNECT BY słowo kluczowe PRIOR jest operato-


rem, który zawiera wartość kolumny z wiersza nadrzędnego
lub podrzędnego w zależności od tego, czy drzewo analizowane
jest od góry do dołu, czy od dołu do góry. Choć klauzula PRIOR
jest najczęściej wykorzystywana do definiowania zależności reku-
rencyjnych, może być również stosowana jako element wymieniany
w sekcjach SELECT, WHERE lub w dowolnej części zapytania, w której
możliwe jest zapisanie odwołania do wybranej kolumny.

Złożona klauzula CONNECT BY


Stosowanie klauzuli CONNECT BY nie ogranicza się jedynie do ope-
rowania hierarchicznymi zestawieniami. Można ją wykorzystać
w odniesieniu do dowolnych zbiorów danych, które są ze sobą
powiązane w sposób rekurencyjny. Na przykład doskonale nadaje
się do wygenerowania listy kolejnych przystanków na trasie
wycieczki (zdefiniowanych w kodzie dołączonym do książki).

Zapytan a CONNECT BY | 13
SELECT w.nazwa nazwa_wycieczki, w.przystanek
FROM wycieczki w
START WITH przystanek_poprzedni IS NULL
CONNECT BY przystanek_poprzedni = PRIOR przystanek
AND nazwa = PRIOR nazwa;

Dodanie warunku odnoszącego się do kolumny nazwa_wycieczki


zapobiega powstaniu pętli, do czego mogłoby dojść z uwagi na
powtarzające się przystanki na trasach kilku wycieczek. Wynik
wykonania instrukcji jest następujący.
NAZWA_WYCIECZKI PRZYSTANEK
--------------- ----------------------
M-28 3
M-28 1
M-28 8
M-28 9
M-28 10
M-28 11
Munising 1
Munising 2
Munising 6
Munising 4
Munising 3
Munising 5
US-2 14
US-2 12
US-2 11
US-2 13

Klauzula CONNECT BY znajduje zastosowanie również jako gene-


rator wierszy. Na przykład, aby wygenerować 100 wierszy, wy-
starczy wpisać podaną tu instrukcję (to sprytne rozwiązanie opra-
cowali Mikito Harakiri i Tom Kyte):
SELECT level x
FROM dual CONNECT BY level <= 100;

W niektórych wcześniejszych wersjach bazy danych Oracle wy-


stępował błąd uniemożliwiający wykonanie opisywanego zada-
nia. Można go jednak ominąć, umieszczając instrukcje logiczne
w podzapytaniu:

14 | SQL. Leksykon k eszonkowy


SELECT x FROM (
SELECT level x
FROM dual CONNECT BY level <= 100);

Praktyczny sposób wykorzystania tej techniki został opisany


w artykule Finding Flight Legs na stronie http://gennick.com/flight.
html.

Klauzula WHERE w zapytaniach CONNECT BY


Umieszczenie klauzuli WHERE w zapytaniach typu CONNECT BY ma
na celu ograniczenie zbioru wyników do określonych wierszy.
Wyrażenie warunkowe zawarte w klauzuli CONNECT BY wskazuje
drzewa, które podlegają przetwarzaniu przez zapytanie. Drzewa
te z kolei wyznaczają wynikowe zbiory wierszy. Natomiast wy-
rażenie warunkowe klauzuli WHERE ogranicza zbiór wyników
do tych wierszy, które powinny zostać zwrócone przez zapytanie.

Złączenia w zapytaniach CONNECT BY


W zapytaniach typu CONNECT BY mogą występować złączenia.
Wówczas kolejność wykonywania poszczególnych czynności jest
następująca:
1. Jako pierwsze realizowane jest złączenie. Oznacza to, że
jakiekolwiek predykaty złączeń są analizowane w pierw-
szej kolejności.
2. Wiersze zwrócone w wyniku wykonania złączenia są pod-
dawane działaniu klauzuli CONNECT BY.
3. Wynik operacji CONNECT BY podlega filtrowaniu na pod-
stawie predykatów klauzuli WHERE.
Oto zmodyfikowana wersja poprzedniego zapytania CONNECT BY,
w której uwzględniono złączenie dostarczające informacji na temat
nazw wodospadów:

Zapytan a CONNECT BY | 15
SELECT w.nazwa nazwa_wycieczki, w.przystanek, wod.nazwa
´nazwa_wodospadu
FROM wycieczki w INNER JOIN wodospady wod
ON w.przystanek = wod.id
START WITH przystanek_poprzedni IS NULL
CONNECT BY w.przystanek_poprzedni = PRIOR w.przystanek
AND w.nazwa = PRIOR w.nazwa;

Uwaga! Nie należy wyznaczać złączeń mogących pominąć węzły


struktury, do której odnosi się dane zapytanie.

Sortowanie wyników zapytania CONNECT BY


Instrukcja CONNECT BY narzuca sortowanie, w którym po węzłach
nadrzędnych wymieniane są węzły potomne, a po nich kolejne
węzły potomne itd. Zazwyczaj w zapytaniach typu CONNECT BY nie
stosuje się standardowej klauzuli ORDER BY, gdyż niszczy ona
hierarchiczny sposób ułożenia danych. Niemniej w bazach danych
Oracle 9i i późniejszych dostępna jest nowa klauzula sortowania
ORDER SIBLINGS BY, która umożliwia sortowanie danych na każ-
dym poziomie, bez wprowadzania zmian w ich hierarchii.
SELECT id, nazwa, typ, id_nadrzednej
FROM jedn_terytorialne
START WITH id_nadrzednej IS NULL
CONNECT BY id_nadrzednej = PRIOR id
ORDER SIBLINGS BY typ, nazwa;
ID NAZWA TYP ID_NADRZEDNEJ
----- ---------- -------- -------------
3 Michigan stan
2 Alger hrabstwo 3
5 Au Train gmina 2
4 Munising gmina 2
1 Munising miasto 2
6 Baraga hrabstwo 3
...

Podzbiór wierszy hrabstwa Baraga następuje po wierszach od-


noszących się do hrabstwa Alger, ponieważ obydwa hrabstwa
występują na tym samym poziomie hierarchii, a z porządku
sortowania wynika, że hrabstwo Baraga powinno być wymie-

16 | SQL. Leksykon k eszonkowy


nione jako drugie z kolei. W ramach hrabstwa Alger dwie gminy
są prezentowane przed miastem, ponieważ sortowanie w pierw-
szej kolejności odnosi się do typu jednostki terytorialnej, a na-
stępnie do jej nazwy. Kolejność gmin wynika z porządku alfa-
betycznego. Każdy poziom hierarchii jest sortowany niezależnie
od pozostałych, co zapewnia zachowanie zależności między
wierszami nadrzędnymi i podrzędnymi.

Pętle w zapytaniach CONNECT BY


Dane o strukturze hierarchicznej często zawierają błędne odnie-
sienia, które powodują, że dany wiersz potomny może być jed-
nocześnie wierszem nadrzędnym (przodkiem) dla innego wiersza.
W takich przypadkach dochodzi do powstawania pętli. Problem
ten można zaobserwować, usuwając sekcję AND w.nazwa = PRIOR
w.nazwa z klauzuli CONNECT BY analizowanego poprzednio
przykładu. Aby wyeliminować tę niedogodność, należy dołączyć
do klauzuli CONNECT BY słowo kluczowe NOCYCLE, a w sekcji SELECT
umieścić pseudokolumnę CONNECT_BY_ISCYCLE.
SELECT w.nazwa nazwa_wycieczki, w.przystanek,
wod.nazwa nazwa_wodospadu, CONNECT_BY_ISCYCLE
FROM wycieczki w INNER JOIN wodospady wod
ON w.przystanek = wod.id
START WITH przystanek_poprzedni IS NULL
CONNECT BY w.przystanek_poprzedni = PRIOR w.przystanek;

Słowo kluczowe NOCYCLE uniemożliwia bazie danych Oracle wy-


konywanie rekurencyjnych pętli. Kolumna CONNECT_BY_ISCYCLE
zwraca wartość 1 dla każdego wiersza, który ma wiersz potomny,
będący jednocześnie rodzicem lub przodkiem. Oto wynik realizacji
przedstawionego zapytania:
NAZWA_WYCIECZKI PRZYSTANEK NAZWA_WODOSPADU
CONNECT_BY_ISCYCLE
--------------- ---------- --------------- ------------------
Munising 1 Munising Falls 0
Munising 2 Tannery Falls 0
Munising 6 Miners Falls 0

Zapytan a CONNECT BY | 17
Munising 4 Wagner Falls 0
Munising 3 Alger Falls 1
...

Wartość 1 w czwartej kolumnie informuje, że węzeł przystanku


o identyfikatorze 3 jest elementem pętli. Przyglądając się uważnie
danym tabeli wycieczki, można zauważyć, że istnieją dwa wpisy,
w których kolumna przystanek zawiera wartość 3. Wpisy te doty-
czą różnych wycieczek. Bez ograniczenia nałożonego na nazwę
wycieczki (w.nazwa) ścieżka rekurencyjnego przetwarzania da-
nych rozgałęzia się na poziomie przystanku 3 na trasie wycieczki
Munising i obejmuje przystanek 1 wycieczki M-28 (wpis podrzędny
w odniesieniu do przystanku 3), a następnie przystanek 2 wy-
cieczki Munising (przestanek podrzędny w odniesieniu do przy-
stanku 1). Ostatecznie na liście przystanków ponownie występuje
przystanek 3 tworzący pętlę.

Funkcje i operatory klauzuli CONNECT BY


Serwer Oracle udostępnia kilka użytecznych funkcji i operato-
rów, które są wykorzystywane podczas budowania zapytań typu
CONNECT BY.
CONNECT_BY_ISCYCLE
Operator ten zwraca wartość 1, jeśli wiersz potomny jest
jednocześnie wierszem przodka. W przeciwnym przypadku
wynikiem jest 0. Jest stosowany łącznie z klauzulą CONNECT
BY NOCYCLE (dostępny w bazach danych Oracle 10g i póź-
niejszych).
CONNECT_BY_ISLEAF
Operator ten zwraca wartość 1 w przypadku wierszy-liści
lub 0 dla wierszy mających wiersze potomne (dostępny
w bazach danych Oracle 10g i późniejszych).
CONNECT_BY_ROOT(kolumna)
Funkcja ta zwraca wartość wiersza początkowego (dostępna
w bazach danych Oracle 10g i późniejszych). Jej działanie
jest podobne do funkcji PRIOR.

18 | SQL. Leksykon k eszonkowy


LEVEL
Operator ten zwraca wartość 0 dla początkowego wiersza
hierarchii, 1 dla węzłów znajdujących się bezpośrednio pod
wierszem początkowym, 2 dla węzłów kolejnego poziomu
itd. Operator LEVEL jest często wykorzystywany do wy-
konywania wcięć tekstu prezentującego hierarchiczne da-
ne wynikowe. Oto przykład jego zastosowania:
RPAD(' ',2*(LEVEL-1)) || pierwsza_kolumna

PRIOR(kolumna) lub PRIOR kolumna


Funkcja ta zwraca wartość wiersza nadrzędnego. Jej działa-
nie jest podobne do funkcji CONNECT_BY_ROOT.
SYS_CONNECT_BY_PATH(kolumna, znak_rozdzielający)
Funkcja ta zwraca złączoną listę wartości kolumny wchodzą-
cych w skład ścieżki między węzłem początkowym a węzłem
analizowanym w danej chwili. Każda wartość jest poprze-
dzana znakiem_rozdzielającym.
Dopisanie wywołania SYS_CONNECT_BY_PATH(w.nazwa, ';')
do sekcji SELECT zapytania przedstawionego w punkcie
„Złączenia w zapytaniach CONNECT BY” spowodowałoby
zwrócenie wyniku o treści: ;Alger Falls, ;Alger Falls;
´Munising Falls, ;Alger Falls;Munising Falls;Scott
Falls itd. Funkcja jest dostępna w bazie danych Oracle 9i
i w wersjach późniejszych.

Konwersje typów danych


Konwersje typów danych zostały opisane w punktach:
• „Funkcja CAST”,
• „Funkcja EXTRACT”,
• „Konwersja daty i czasu” (na wybranej platformie),
• „Konwersja wartości liczbowych” (na wybranej platformie).

Konwersje typów danych | 19


Większość systemów bazodanowych umożliwia niejawną kon-
wersję jednego typu danych w drugi. Oto przykład charaktery-
styczny dla platformy Oracle:
SELECT * FROM wodospady WHERE id='1';

Często jednak korzystniejsze okazuje się zastosowanie mechani-


zmów jawnej konwersji, ponieważ dają one gwarancję tego, jakie
wartości będą przekształcane i jakiego typu wyniki będę gene-
rowane.

Typy danych — liczby całkowite


(wartości binarne)
Wszystkie platformy poza bazą danych Oracle obsługują nastę-
pujące binarne typy liczb całkowitych:
SMALLINT
INTEGER
BIGINT

Odpowiadają one dwu-, cztero- i ośmiobajtowym liczbom całko-


witym o zakresach: –32 768 – 32 768, –2 147 483 648 – 2 147 483 647
oraz –9 223 372 036 854 775 808 – 9 223 372 036 854 775 807.

Typy danych — ciągi znaków


We wszystkich systemach bazodanowych oprócz oprogramowa-
nia Oracle do przechowywania danych znakowych wykorzystuje
się typ VARCHAR:
VARCHAR(maksymalna_liczba_bajtów)

W bazie danych MySQL dostępny jest również typ TEXT stano-


wiący odpowiednik typu VARCHAR.
TEXT(maksymalna_liczba_bajtów)

20 | SQL. Leksykon k eszonkowy


Pracując w środowisku Oracle, do standardowej nazwy typu da-
nych należy dodać cyfrę 2. Nazwa typu to VARCHAR2:
VARCHAR2(maksymalna_liczba_bajtów)

Baza danych Oracle 9i oraz kolejne jej wersje umożliwiają także


określenie, czy rozmiar odnosi się do liczby bajtów, czy liczby
znaków:
VARCHAR2(maksymalna_liczba_bajtów BYTE)
VARCHAR2(maksymalna_liczba_znaków CHAR)

Użycie opcji CHAR oznacza, że wszelkie operacje z wykorzystaniem


indeksów ciągów tekstowych (np. wywołanie funkcji SUBSTR)
będą realizowane w odniesieniu do znaków, a nie bajtów.
Maksymalne wartości rozmiaru ciągu wynoszą odpowiednio
4000 bajtów (Oracle), 32 672 bajty (DB2), 8000 bajtów (SQL Server),
65 532 bajty (MySQL) oraz 1 GB (PostgreSQL).

Typy danych — data i czas


Sposoby obsługi wartości daty i czasu różnią się w poszczegól-
nych systemach bazodanowych i nie mają właściwie żadnych cech
wspólnych.

DB2
Bazy danych DB2 obsługują następujące typy daty i czasu:
DATE
TIME
TIMESTAMP
TIMESTAMP(od_0_do_12_domyślnie_6)

Typ DATE zapewnia przechowywanie wartości roku, miesiąca


i dnia. Typ TIME opisuje godziny, minuty i sekundy. Typ TIMESTAMP
służy do gromadzenia zarówno daty, jak i czasu z dokładnością
do 12 cyfr dziesiętnych. Zakres dopuszczalnych wartości zawiera
się w przedziale od 1 r. do 9999 r.

Typy danych — data czas | 21


MySQL
Bazy danych MySQL obsługują następujące typy daty i czasu:
DATE
TIME
DATETIME
TIMESTAMP

Typ DATE służy do przechowywania dat z zakresu od 01.01.1000


do 31.12.9999. Typ TIME definiuje wartości godzin, minut i sekund
z przedziału od –838:59:59 do 838:59:59. Typ DATETIME umożliwia
przetwarzanie jednocześnie daty i czasu (o takim samym zakresie,
jaki wynika z typów DATE i TIME, ale z założeniem, że wartości
godzin nie przekraczają 23). Z kolei typ TIMESTAMP odwzorowuje
wartości znacznika czasu charakterystyczne dla systemów Unix.
Podczas każdej operacji INSERT lub UPDATE pierwsza kolumna
TIMESTAMP w wierszu otrzymuje bieżącą wartość czasu, chyba że
zostanie dla niej podana inna wartość.

Oracle
Bazy danych Oracle obsługują następujące typy daty i czasu:
DATE
TIMESTAMP
TIMESTAMP WITH TIME ZONE
TIMESTAMP WITH LOCAL TIME ZONE
TIMESTAMP(od_0_do_9_domyślnie_6) ...

Typ DATE przechowuje wartości daty i czasu z dokładnością do


jednej sekundy. Typ TIMESTAMP dodatkowo uwzględnia informację
o ułamkowej części sekundy. Opcja WITH TIME ZONE wymusza
zachowanie dodatkowej wartości strefy czasowej. Natomiast opcja
WITH LOCAL TIME ZONE oznacza, że zapisywane wartości są
właściwe dla strefy czasowej serwera bazy danych, co z kolei
wymusza automatyczną konwersję dat między wartościami

22 | SQL. Leksykon k eszonkowy


właściwymi dla serwera i jednostki, która ustanowiła sesję
komunikacyjną. Zakres dat zawiera się w przedziale od 4712 r.
p.n.e. do 9999 r. n.e. W przypadku typu TIMESTAMP istnieje
możliwość określenia precyzji reprezentacji dat do dziewiątego
miejsca po przecinku.

PostgreSQL
Bazy danych PostgreSQL obsługują następujące typy daty i czasu:
DATE
TIME [WITH[OUT] TIME ZONE]
TIMESTAMP [WITH[OUT] TIME ZONE]
TIME(od_0_do_6_lub_od_0_do_10) ...
TIMESTAMP(od_0_do_6) ...

Typ DATE umożliwia jedynie rejestrowanie daty. Typ TIME jest


przeznaczony do przechowywania samej wartości czasu. Typ
TIMESTAMP odpowiada za gromadzenie informacji zarówno o da-
cie, jak i o czasie. Jednak domyślnie nie uwzględnia strefy cza-
sowej. Zakres wartości zawiera się w przedziale od 4713 r. p.n.e.
do 294 276 r. n.e. (w przypadku typów TIMESTAMP) lub do
5 874 897 r. n.e. (w przypadku typów DATE).
Czas przechowywany w kolumnach typu TIME i TIMESTAMP może
być odwzorowany z dokładnością do ułamkowych części sekundy.
Precyzję zapisu wyznacza liczba cyfr następujących po przecinku
dziesiętnym sekundy. Zakres zależy od tego, czy do zapisu czasu jest
wykorzystywana wartość rzeczywista DOUBLE PRECISION (precyzja
od 0 do 6 cyfr), czy wartość BIGINT (precyzja od 0 do 10 cyfr).
Domyślnie stosowany jest typ DOUBLE PRECISION, a zmiana tego
ustawienia jest możliwa jedynie na etapie kompilacji (za pomocą
opcji kompilacji). Zastosowanie typu BIGINT oznacza ograniczenie
górnego zakresu dat TIMESTAMP do roku 294 276.

Typy danych — data czas | 23


SQL Server
Bazy danych SQL Server obsługują następujące typy daty i czasu:
DATE
DATETIME
DATETIME2
DATETIME2(precyzja)
DATETIMEOFFSET
DATETIMEOFFSET(precyzja)
SMALLDATETIME
TIME
TIME(precyzja)

Typ DATE pozwala na zapisywanie dat z przedziału od 01.01.0001


do 31.12.9999. Kolumny typu DATETIME mogą przechowywać
wartości daty i czasu z rozdzielczością 3,33 ms w zakresie od
01.01.1753 do 31.12.9999. Typ DATETIME2 jest połączeniem typów
DATE i TIME. Z kolei typ DATETIMEOFFSET uzupełnia typ DATETIME2
o informację na temat różnicy w strefach czasowych. Kolumny
SMALLDATETIME przechowują datę z dokładnością do jednej mi-
nuty i czas z zakresu od 01.01.1900 do 06.01.2079. Wartości typu
TIME zawierają jedynie dane o czasie.

Typy DATETIME2, DATETIMEOFFSET oraz TIME umożliwiają zdefi-


niowanie opcjonalnego parametru, który określa liczbę cyfr dzie-
siętnych wykorzystywanych do zapisu ułamkowej wartości se-
kund. Domyślna precyzja reprezentacji sekund pozwala na zapis
siedmiu cyfr po przecinku dziesiętnym. Dopuszczalne wartości
precyzji zawierają się w zakresie od 0 do 7.

Uwaga
Baza danych SQL Server udostępnia również typ kolumn
o nazwie TIMESTAMP, który nie ma jednak nic wspólnego
z przechowywaniem wartości dat i czasu.

24 | SQL. Leksykon k eszonkowy


Typy danych — liczby rzeczywiste
Typy danych przeznaczone do przechowywania liczb rzeczy-
wistych są znacznie bardziej ujednolicone niż typy daty i czasu.
W kolejnych punktach zostały opisane najczęściej wykorzysty-
wane stałopozycyjne typy liczbowe.

Typ DECFLOAT bazy danych DB2


Środowisko DB2 9.5 i późniejsze udostępniają nowy typ DECFLOAT,
który bazuje na standardzie IEEE 754r. Jego zastosowanie wymaga
od programisty wyboru jednej z dwóch opcji odpowiadających za
precyzję przechowywania liczb:
DECFLOAT(16)
DECFLOAT(34)

Deklaracja DECFLOAT(16) oznacza zastosowanie 16-cyfrowej pre-


cyzji, co z kolei wymaga zarezerwowania ośmiu bajtów do zapisa-
nia każdej wartości. Deklaracja DECFLOAT(34) zapewnia 34-cyfrową
precyzję i prowadzi do zarezerwowania 16 bajtów pamięci na
każdą wartość.
Typ DECFLOAT(16) wyznacza zakres wartości:
od –9.999999999999999 × 10384 do –1.0 × 10–383
oraz
od 1.0 × 10–383 do 9.999999999999999 × 10384

Typ DECFLOAT(34) obejmuje natomiast liczby z przedziału:


od –9.999999999999999999999999999999999 × 106144 do –1.0 × 10–6143
oraz
od 1.0 × 10–6143 do 9.999999999999999999999999999999999 × 106144

Przetwarzając wartości typu DECFLOAT, można korzystać z pięciu


trybów zaokrąglania liczb:
ROUND_CEILING
Zaokrąglenie w górę, zawsze w kierunku dodatnim.

Typy danych — l czby rzeczyw ste | 25


ROUND_FLOOR
Zaokrąglenie w dół, zawsze w kierunku ujemnym.
ROUND_HALF_UP
Zaokrąglenie do najbliższej mniejszej lub większej liczby
całkowitej. Wartość 0,5 jest zaokrąglana w górę.
ROUND_HALF_EVEN
Zaokrąglenie do najbliżej liczby całkowitej. Wartość 0,5 jest
zaokrąglana w górę lub w dół, ale tak, aby wynik był liczbą
parzystą.
ROUND_DOWN
Zaokrąglanie w kierunku zera.
Sposób zaokrąglania musi zostać zdefiniowany na poziomie bazy
danych, za pomocą parametru decflt_rounding. Aby zmiana zo-
stała uwzględniona, trzeba zrestartować bazę danych.

Typy DECIMAL i NUMBER


Wszystkie systemy bazodanowe umożliwiają przechowywanie
dziesiętnych wartości liczbowych w kolumnach typu DECIMAL
(w tym również wartości monetarnych):
DECIMAL
DECIMAL(precyzja)
DECIMAL(precyzja, skala)

W oprogramowaniu Oracle DECIMAL jest synonimem typu NUMBER


(firma Oracle zaleca stosowanie typu NUMBER).
Deklaracja DECIMAL(precyzja) opisuje wartość całkowitą prze-
chowywaną z wykorzystaniem takiej liczby cyfr, jaką wyznacza
precyzja. Z kolei składnia DECIMAL(precyzja, skala) odnosi się
do stałopozycyjnych wartości rzeczywistych. Całkowita liczba
cyfr jest wyznaczana przez parametr precyzja. Natomiast liczba
cyfr występujących po prawej stronie przecinka dziesiętnego

26 | SQL. Leksykon k eszonkowy


jest definiowana przez parametr skala. Na przykład zapis DECIMAL
´(9,2) oznacza możliwość zapisu wartości z przedziału o górnej
granicy 9 999 999,99.

Uwaga
W bazach danych Oracle zadeklarowanie kolumny jako DECIMAL
bez określenia precyzji i skali powoduje utworzenie kolumny
przeznaczonej do przechowywania wartości zmiennopozycyj-
nych. W środowisku DB2 ta sama deklaracja jest równoważna
zapisowi DECIMAL(5,0). Natomiast SQL Server interpretuje ją
jako DECIMAL(18,0).

Maksymalne wartości precyzji i skali wynoszą odpowiednio: 38


i 127 (Oracle), 31 i 31 (DB2), 38 i 38 (SQL Server), 65 i 30 (MySQL)
oraz 1000 i 1000 (PostgreSQL).

Konwersja daty i czasu — DB2


Twórcy platformy DB2 włożyli ostatnio wiele wysiłku w zaim-
plementowanie emulacji funkcji TO_CHAR i TO_DATE znanych z bazy
danych Oracle. Z tego względu wszyscy projektanci baz danych,
którym zależy na zapewnieniu zgodności z systemem Oracle, po-
winni zapoznać się z zasadami działania wymienionych funkcji. Ich
zastosowanie zostało opisane w punkcie „Konwersje daty i czasu
— Oracle”.
Jeśli zgodność z platformą Oracle nie jest wymagana, konwersję
wartości dat, czasu i znaczników czasowych można przeprowa-
dzić za pomocą opisanych poniżej funkcji. Parametr określany
jako data_czas może odpowiadać dacie, czasowi lub znacznikowi
czasowemu. Argument zapisany jako data może być jedynie datą
lub znacznikiem czasowym. Z kolei parametr czas może oznaczać
czas lub znacznik czasowy. Jedynie argument znacznik_czasowy
określa wyłącznie znacznik czasowy. Analogicznie zakres_dat

Konwersja daty czasu — DB2 | 27


odpowiada okresowi opisanemu za pomocą dat. Parametr zakres_
´czasu wyznacza okres definiowany przez wartości czasu lub
znaczników czasowych. Natomiast zakres_znaczników_czasowych
reprezentuje okres opisany za pomocą znaczników czasowych.
Dozwolone są również wszystkie tekstowe odpowiedniki stosow-
nych wartości.
BIGINT(data_czas)
CHAR(data_czas, [ISO|USA|EUR|JIS|LOCAL])
DATE(data)
DATE(liczba_całkowita)
DATE('yyyyddd')
DAY(data)
DAY(zakres_dat)
DAYNAME(data)
DAYOFWEEK(data)
DAYOFWEEK_ISO(data)
DAYOFYEAR(data)
DAYS(data)
DECIMAL(data_czas[,precyzja[,skala]])
GRAPHIC(data_czas, [ISO|USA|EUR|JIS|LOCAL])
HOUR(czas)
HOUR(zakres_czasu)
INTEGER(tylko_data)
INTEGER(tylko_czas)
JULIAN_DAY(data)
MICROSECOND(znacznik_czasu)
MICROSECOND(zakres_znaczników_czasowych)
MIDNIGHT_SECONDS(czas)
MINUTE(czas)
MINUTE(zakres_czasu)
MONTH(data)
MONTH(zakres_dat)
MONTHNAME(data)
QUARTER(data)
SECOND(czas)
SECOND(zakres_czasu)
TIME(czas)
TIMESTAMP(znacznik_czasu)
TIMESTAMP(data, czas)
TIMESTAMP_FORMAT(ciąg_tekstowy, 'YYYY-MM-DD HH24:MI:SS')
TIMESTAMP_ISO(data_czas)
TO_CHAR(znacznik_czasu, 'YYYY-MM-DD HH24:MI:SS')
TO_DATE(ciąg_tekstowy, 'YYYY-MM-DD HH24:MI:SS')
VARCHAR(data_czas)

28 | SQL. Leksykon k eszonkowy


VARCHAR_FORMAT(znacznik_czasu, 'YYYY-MM-DD HH24:MI:SS')
VARGRAPHIC(data_czas, [ISO|USA|EUR|JIS|LOCAL])
WEEK(data)
WEEK_ISO(data)
YEAR(data)
YEAR(zakres_dat)

W następującym przykładzie wykorzystano niektóre z wymie-


nionych funkcji do utworzenia ciągu tekstowego odpowiadają-
cego wartościom kolumny data_potwierdzenia.
SELECT w.id,
RTRIM(CHAR(DAY(w.data_potwierdzenia))) || ' '
|| MONTHNAME(w.data_potwierdzenia) || ' '
|| RTRIM(CHAR(YEAR(w.data_potwierdzenia))) potwierdzono
FROM wodospady w;

ID POTWIERDZONO
----------- ---------------
1 8 grudzień 2005
2 8 grudzień 2005
3 8 grudzień 2005
4 8 grudzień 2005
...

Funkcje wymagające określenia parametrów daty, czasu lub


znacznika czasowego akceptują również ciągi tekstowe, które mo-
gą być poddane niejawnej konwersji na wartości wymienionych
typów. Oto przykład:
SELECT DATE('2003-11-7') ,
TIME('21:25:00'),
TIMESTAMP('2003-11-7 21:25:00.00')
FROM przestawna WHERE x = 1;

Za pomocą funkcji CHAR można formatować daty, czas i znaczniki


czasowe w różny sposób, zależnie od wartości drugiego parametru.
SELECT CHAR(current_date, ISO),
CHAR(current_date, LOCAL),
CHAR(current_date, USA)
FROM przestawna WHERE x=1;

2003-11-06 2003-11-06 11/06/2003

Konwersja daty czasu — DB2 | 29


Funkcja DATE umożliwia przekształcenie liczby całkowitej na
wartość daty. Wartości liczbowe muszą mieścić się w przedziale
od 1 do 3 652 059, przy czym liczba 1 odpowiada dacie 01.01.0001.
Funkcja DATE może również wykonać odwrotną konwersję.
SELECT DATE(716194), DAYS('1961-11-15')
FROM przestawna WHERE x=1;

1961-11-15 716194

Zastosowanie funkcji DECIMAL i BIGINT pozwala na uzyskanie


wartości daty, czasu i znacznika czasowego w formie liczby rze-
czywistej lub ośmiobajtowej liczby całkowitej zgodnych z for-
matem rrrrmmdd, ggmmss bądź rrrrmmddggmmss.nnnnnnn1.
SELECT DECIMAL(current_date),
DECIMAL(current_time),
DECIMAL(current_timestamp)
FROM przestawna
WHERE x=1;

20110227, 170632, 20110227170632,132511

Funkcja JULIAN_DAY zwraca liczbę dni, jakie upłynęły od 01.01.4713


p.n.e. (czyli od 1 stycznia –4713 r.). Dacie tej odpowiada zerowa
wartość dnia. Odwrotna konwersja nie jest możliwa, gdyż nie ist-
nieje stosowna funkcja.

Konwersja daty i czasu — MySQL


W bazie danych MySQL zostało zaimplementowanych wiele
funkcji konwersji daty i czasu, z których pewne obsługują również
znaczniki czasu typowe dla systemu Unix. Poszczególne rozwią-
zania zostały opisane w kolejnych punktach.

1
W polskiej wersji DB2 po wykonaniu polecenia (które zawiera w swoim
kodzie kropkę) w wyniku otrzymuje się przecinek — przyp. tłum.

30 | SQL. Leksykon k eszonkowy


Wyodrębnianie składowych daty i czasu
Następujące funkcje MySQL udostępniają określone składowe daty
i czasu:
DAYOFWEEK(data)
WEEKDAY(data)
DAYOFMONTH(data)
DAYOFYEAR(data)
MONTH(data)
DAYNAME(data)
MONTHNAME(data)
QUARTER(data)
WEEK(data)
WEEK(data, pierwszy_dzień)
YEAR(data)
YEARWEEK(data)
YEARWEEK(data, pierwszy_dzień)
HOUR(czas)
MINUTE(czas)
SECOND(czas)

Aby otrzymać aktualną wartość daty w formacie dd-miesiąc-rrrr,


należy wykonać następującą instrukcję:
SELECT CONCAT(DAYOFMONTH(CURRENT_DATE), '-',
MONTHNAME(CURRENT_DATE), '-',
YEAR(CURRENT_DATE));

27-luty-2011

W funkcjach, w których występuje parametr pierwszy_dzień, na-


leży wskazać, czy tydzień rozpoczyna się od niedzieli (pierwszy_
´dzien = 0), czy od poniedziałku (pierwszy_dzien = 1).

Funkcje TO_DAYS i FROM_DAYS


Zastosowanie funkcji TO_DAYS pozwala na przekształcenie wartości
daty na liczbę dni, które upłynęły od początku naszej ery (dzień
01.01.0001 jest uznawany za dzień 1).
SELECT TO_DAYS(CURRENT_DATE);

732110

Konwersja daty czasu — MySQL | 31


Odwrotne przekształcenie zapewnia funkcja FROM_DAYS.
SELECT FROM_DAYS();

2004-06-13

Zastosowanie opisywanych funkcji ogranicza się jedynie do


przetwarzania dat kalendarza gregoriańskiego, czyli występują-
cych po 15 października 1582 r. Wartości zwracane przez
funkcje TO_DAYS i FROM_DAYS dla dat wcześniejszych są błędne.

Obsługa znacznika czasowego Unix


Przedstawione w tym punkcie funkcje odpowiadają za konwer-
sję znacznika czasowego charakterystycznego dla systemów Unix.
UNIX_TIMESTAMP([data])
Funkcja ta zwraca znacznik czasowy systemu Unix, który
jest wartością całkowitą bez znaku, przechowującą liczbę
sekund, które upłynęły od dnia 01.01.1970. Jeśli nie zosta-
nie podany żaden parametr wywołania funkcji, zwracaną
wartością jest aktualny znacznik czasowy. Argumentem
data może być ciąg tekstowy daty, ciąg tekstowy daty i czasu,
ciąg tekstowy znacznika czasowego lub ich liczbowe odpo-
wiedniki.
FROM_UNIXTIME(znacznik_czasowy_Unix[, format])
Funkcja ta przekształca znacznik czasowy systemu Unix
w ciąg tekstowy daty i czasu, sformatowany zgodnie z pa-
rametrem format do postaci pozwalającej na wyświetlenie
uzyskanej wartości na ekranie. Lista znaczników formatu
została zamieszczona w tabeli 1., przedstawionej w dalszej
części tego punktu.
Przykładowo, aby przekształcić datę 04.01.2004 19:18 w liczbę se-
kund, które upłynęły od 01.01.1970, należy użyć następującej in-
strukcji:

32 | SQL. Leksykon k eszonkowy


SELECT UNIX_TIMESTAMP(20040104191800);

1073240280

Aby przekształcić znacznik czasowy w ciąg tekstowy czytelny


dla człowieka, należy zastosować instrukcję:
SELECT FROM_UNIXTIME(1073240280, '%d.%m.%Y godz.:
%H:%i:%S');

04.01.2004 godz.: 19:18:00

Parametr format ma charakter opcjonalny. Domyślny format daty,


dla przedstawionego wcześniej przypadku, umożliwia uzyskanie
wartości: 2004-01-04 19:18:00.

Funkcje operujące sekundami dnia


Baza danych MySQL udostępnia dwie funkcje pozwalające na
operowanie liczbą sekund, które upłynęły w danym dniu:
SEC_TO_TIME(sekundy)
Funkcja ta przekształca liczbę sekund, które upłynęły od
północy, na ciąg tekstowy o postaci gg:mm:ss.
TIME_TO_SEC(czas)
Funkcja ta przekształca czas w liczbę sekund, które upłynęły
od północy.
Oto stosowny przykład:
SELECT TIME_TO_SEC('19:18');

69480

SELECT SEC_TO_TIME(69480);

19:18:00

Konwersja daty czasu — MySQL | 33


Funkcje DATE_FORMAT i TIME_FORMAT
Obydwie te funkcje cechuje niezwykle duża elastyczność w prze-
kształcaniu wartości daty i czasu na postać ciągów tekstowych.
Instrukcja DATE_FORMAT odpowiada za operacje na datach, nato-
miast TIME_FORMAT jest przeznaczona do przetwarzania informacji
o czasie.
SELECT DATE_FORMAT(CURRENT_DATE, '%W, %d %M %Y');

piątek, 11 marzec 2011

Drugi parametr obydwu funkcji jest ciągiem tekstowym formatu.


Występujące we wspomnianym ciągu znaczniki formatu są zastę-
powane przez odpowiednie elementy składowe daty i czasu. Ich
opis znajduje się w tabeli 1. Pozostałe znaki występujące w ciągu
formatu (takie jak prezentowane w przykładzie przecinek i spacja)
są umieszczane w ciągu wyjściowym w miejscach, w których
występują w ciągu formatu.
Tabela 1. Znaczniki formatu daty w bazie danych MySQL2
Znaczn k
Op s
formatu
%a Sk ót nazwy dnia tygodnia pon wto śro …
%b Sk ót nazwy miesiąca sty lut mar …
%c Nume miesiąca 1 2 3 …
%D Dzień miesiąca z sufiksem liczebnika po ządkowego (występującym
w języku angielskim) 1st 2nd 3rd …
%d Dzień miesiąca wa tość dwucyf owa 01 02 03 …
%e Dzień miesiąca 1 2 3 …
%f Mik osekundy 000000 999999
%H Godzina wa tość dwucyf owa fo mat 24 godzinny 00…23

2
Aby włączyć wyświetlanie polskich nazw miesięcy i dni tygodnia,
należy zmienić wartość zmiennej lc_time_names, wykonując instrukcję
SET lc_time_names = 'pl_PL' — przyp. tłum.

34 | SQL. Leksykon k eszonkowy


Tabela 1. Znaczniki formatu daty w bazie danych MySQL — ciąg dalszy
Znaczn k
Op s
formatu
%h Godzina wa tość dwucyf owa fo mat 12 godzinny 01…12
%I Godzina wa tość dwucyf owa fo mat 12 godzinny 01…12
%i Minuty 00 01 … 59
%j Nume dnia w oku 001…366
%k Godzina fo mat 24 godzinny 0 1 … 23
%l Godzina fo mat 12 godzinny 1 2 … 12
%M Nazwa miesiąca styczeń, luty …
%m Nume miesiąca 01 02 … 12
%p Oznaczenie po y dnia (występujące w języku angielskim) AM PM
%r Czas w danym dniu w fo macie 12 godzinnym np 12:15:05 PM
%S Sekundy 00 01 … 59
%s Działanie znacznika jest takie samo jak znacznika %S
%T Czas w danym dniu w fo macie 24 godzinnym np 12:15:05
%U Nume tygodnia w któ ym niedziela jest pie wszym dniem 00 01 …53
%u Nume tygodnia w któ ym poniedziałek jest pie wszym dniem 00 01 …53
%V Nume tygodnia w któ ym niedziela jest pie wszym dniem zliczanie
ozpoczyna się od wa tości 01 i jest wykonywane analogicznie jak
w p zypadku znacznika %X 01 02 …53
%v Nume tygodnia w któ ym poniedziałek jest pie wszym dniem zliczanie
ozpoczyna się od wa tości 01 i jest wykonywane analogicznie jak
w p zypadku znacznika %x 01 02 … 53
%W Nazwa dnia tygodnia poniedziałek wtorek …
%w Nume dnia tygodnia 0 = niedziela 1 = poniedziałek …
%X Rok danego tygodnia wa tość czte ocyf owa za pie wszy dzień tygodnia
uznawana jest niedziela p zetwa zanie analogiczne jak w p zypadku
znacznika %V
%x Rok danego tygodnia wa tość czte ocyf owa za pie wszy dzień tygodnia
uznawany jest poniedziałek p zetwa zanie analogiczne jak w p zypadku
znacznika %v
%Y Czte ocyf owa wa tość oku 2003 2004 …
%y Dwucyf owa wa tość oku 03 04 …
%% Umieszczenie w ciągu wynikowym znaku wa tości p ocentowej (%)

Konwersja daty czasu — MySQL | 35


Konwersja daty i czasu — Oracle
Korzystając z bazy danych Oracle do konwersji wartości daty
i czasu, można zastosować następujące funkcje:
TO_CHAR({data_czas|interwał}, format}
TO_DATE(ciąg_tekstowy, format)
TO_TIMESTAMP(ciąg_tekstowy, format)
TO_TIMESTAMP_TZ(ciąg_tekstowy, format)
TO_DSINTERVAL('D HH:MI:SS')
TO_YMINTERVAL('Y-M')
NUMTODSINTERVAL(liczba, 'jednostka_ds')
NUMTOYMINTERVAL(liczba, 'jednostka_ym')

jednostka_ds ::= {DAY|HOUR|MINUTE|SECOND}


jednostka_ym ::= {YEAR|MONTH}

Parametr format umożliwia określenie tekstowej prezentacji


wartości daty i czasu. Oto przykładowa definicja formatu wy-
świetlania daty:
SELECT nazwa,
TO_CHAR(data_potwierdzenia, 'dd-Mon-yyyy') cdate
FROM wodospady;

Munising Falls 08-Gru-2005


Tannery Falls 08-Gru-2005
Alger Falls 08-Gru-2005
...

Możliwa jest również konwersja w przeciwnym kierunku:


INSERT INTO wodospady (id, nazwa, data_potwierdzenia)
VALUES (15, 'Tahquamenon',
TO_TIMESTAMP('29-Dec-2006','dd-Mon-yyyy'));

Znaczniki składające się na ciąg formatu zostały przedstawione


w tabeli 2. Wyniki generowane przez większość z nich zależą od
języka ustanowionej sesji (tzn. jeśli sesja została ustanowiona
w języku francuskim, zwracane są francuskie nazwy miesięcy).

36 | SQL. Leksykon k eszonkowy


Tabela 2. Znaczniki formatowania daty w bazie danych Oracle
Znaczn k
Op s
formatowan a
AM lub PM Wyznacznik po y dnia (AM p zed południem
A.M. lub P.M. PM po południu)
BC lub AD Wyznacznik e y (BC p zed naszą e ą AC nasza e a)
B.C. lub A.D.
CC Wiek Dostępny jedynie w odniesieniu do danych
wyjściowych
D Dzień tygodnia Pa amet NLS_TERRITORY ok eśla któ emu
dniowi tygodnia jest p zypisywana wa tość 1
DAY Day lub day Nazwa dnia tygodnia
DD Nume dnia w miesiącu
DDD Nume dnia w oku
DL Dłuższy ciąg daty Dostępny jedynie w danych wyjściowych
Znajduje zastosowanie jedynie w połączeniu z pa amet em TS
DS K ótszy ciąg daty Dostępny jedynie w danych wyjściowych
Znajduje zastosowanie jedynie w połączeniu z pa amet em TS
DY Dy lub dy Sk ót nazwy dnia Wielkość znaków sk ótu odpowiada wielkości
znaków ciągu fo matu
E Sk ót nazwy e y dla japońskiego kalenda za impe ialnego
(ang Japanese Imperial) oficjalnego kalenda za Republiki
Chin (ang ROC Official) i tajskiego kalenda za buddyjskiego
(ang Thai Buddha) Stosowany jedynie w odniesieniu
do danych wejściowych
EE Pełna nazwa e y
FF, FF1...FF9 Części sekundy Pa amet stosowany jedynie w odniesieniu
do wa tości typu TIMESTAMP Zawsze należy używać dwóch
wa tości F Pa amet FF1...FF9 jest dostępny jedynie
w bazie danych O acle Database 10g i późniejszych
FM Eliminuje puste znaki z ciągu wyjściowego
FX Wp owadza wymóg dokładnej zgodności danych wejściowych
z ok eślonym fo matem
HH lub HH12 Godzina dnia Wa tości od 1 do 12 Pa amet HH12 jest
stosowany jedynie w odniesieniu do danych wyjściowych

Konwersja daty czasu — Oracle | 37


Tabela 2. Znaczniki formatowania daty w bazie danych Oracle — ciąg dalszy
Znaczn k
Op s
formatowan a
HH24 Godzina dnia Wa tości od 0 do 23
IW Tydzień standa du SO w danym oku Pa amet stosowany
jedynie w odniesieniu do danych wyjściowych
IYY lub IY lub I Ostatnie t zy dwie lub jedna cyf a oku zapisanego
w standa dzie SO Pa amet stosowany jedynie w odniesieniu
do danych wyjściowych
IYYY Rok standa du SO Pa amet stosowany jedynie w odniesieniu
do danych wyjściowych
J Data kalenda za juliańskiego 01 01 4712 p n e jest uznawany
za dzień o wa tości 1
MI Minuty
MM Nume miesiąca
MON Mon lub mon Sk ót nazwy miesiąca
MONTH Month Nazwa miesiąca
lub month
Q Kwa tał oku Pa amet stosowany jedynie w odniesieniu
do danych wyjściowych
RM lub rm Rzymska cyf a odpowiadająca nume owi miesiąca
RR Dwie ostatnie cyf y oku Wyko zystuje p zesunięte okno
stuleci 00 49 = 20xx 50 99 = 19xx
RRRR Czte ocyf owa wa tość oku (w ciągu wejściowym
akceptowana jest ównież wa tość dwucyf owa) Okno stuleci
jest takie samo jak w p zypadku pa amet u RR
SCC Włączenie ujemnych wa tości dat sp zed naszej e y Pa amet
stosowany jedynie w odniesieniu do danych wyjściowych
SP Sufiks p zekształcający wa tość liczbową na zapis słowny
SPTH Sufiks p zekształcający wa tość liczbową na zapis słowny i fo mat
po ządkowy
SS Sekundy
SSSS Liczba sekund któ e up ynęły od północy

38 | SQL. Leksykon k eszonkowy


Tabela 2. Znaczniki formatowania daty w bazie danych Oracle — ciąg dalszy
Znaczn k
Op s
formatowan a
SYEAR SYear Słowna wa tość oku Daty sp zed naszej e y mają wa tość
lub syear ujemną Wielkość znaków odpowiada wielkości znaków
ciągu fo matu Pa amet stosowany jedynie w odniesieniu
do danych wyjściowych
SYYYY Czte ocyf owa wa tość oku Daty sp zed naszej e y mają
wa tość ujemną
TH lub th Sufiks p zekształcający liczby na wa tości po ządkowe
TS Fo mat sk óconego ciągu czasu Pa amet stosowany
jedynie w odniesieniu do danych wyjściowych i w połączeniu
z pa amet ami DL i DS
TZD Sk ót nazwy st efy czasowej Pa amet stosowany jedynie
w odniesieniu do danych wejściowych
TZH Godzinowa óżnica czasu w odniesieniu do czasu UTC
TZM Minutowa óżnica czasu w odniesieniu do czasu UTC
TZR St efa czasowa
W Nume tygodnia w miesiącu (od 1 do 5) Tydzień o wa tości
1 ozpoczyna się pie wszego dnia miesiąca i kończy siódmego
dnia miesiąca Pa amet stosowany jedynie w odniesieniu
do danych wyjściowych
WW Nume tygodnia w oku (od 1 do 53) Pa amet stosowany
jedynie w odniesieniu do danych wyjściowych
X Znak lokalnego systemu wyko zystywany do oznaczania
sepa ato a dziesiętnego W języku polskim odpowiada
p zecinkowi (w ame ykańskiej odmianie angielskiego
k opce)
Y,YYY Czte ocyf owa wa tość oku ze znakiem p zecinka
YEAR Year Słowna wa tość oku Pa amet stosowany jedynie
lub year w odniesieniu do danych wyjściowych
YYY lub YY lub Y Ostatnie t zy dwie cyf y lub jedna cyf a oku
YYYY Czte ocyf owa wa tość oku

Konwersja daty czasu — Oracle | 39


Podczas konwersji na tekst wielkość znaków w ciągach wyniko-
wych (np. w skrótach miesięcy) jest uzależniona od wielkości liter
znacznika formatu. Zatem zastosowanie znacznika 'Mon' spowo-
duje zawrócenie skrótów 'Sty' lub 'Lut'. Znacznik 'mon' wyge-
neruje wartości 'sty' i 'lut'. Natomiast 'MON' zwraca tekst 'STY'
lub 'LUT'. Podczas przekształcania wartości z formatu tekstowego
wielkość znaków nie jest istotna.
W przypadku wszystkich funkcji ciąg formatu jest opcjonalny.
Może zostać pominięty, jeśli wartości danych wejściowych spełniają
kryteria domyślnych formatów daty, określonych przez parametry
NLS_DATE_FORMAT w przypadku dat, NLS_TIMESTAMP_FORMAT
w przypadku znaczników czasu oraz NLS_TIMESTAMP_TZ_FORMAT
w przypadku znaczników czasu zawierających informacje o stre-
fach czasowych. Ustawienia NLS można sprawdzić, kierując za-
pytanie do tabeli NLS_SESSION_PARAMETERS.

Konwersja daty i czasu — PostgreSQL


Do przekształcania wartości daty i czasu na ciągi tekstowe i od-
wrotnie służą następujące funkcje:
TO_CHAR({timestamp|interval}, format)
TO_DATE(string, format)
TO_TIMESTAMP(string, format)

Na przykład, aby uzyskać tekstową reprezentację znacznika


czasowego, można zastosować instrukcję:
SELECT w.nazwa,
TO_CHAR(w.data_potwierdzenia, 'dd-Mon-YYYY')
FROM wodospady w;

nazwa | to_char
-----------------+-------------
Munising Falls | 08-Dec-2005
Tannery Falls | 08-Dec-2005
Alger Falls | 08-Dec-2005
...

40 | SQL. Leksykon k eszonkowy


Aby wykonać operację odwrotną (zamienić ciąg tekstowy na datę),
wystarczy wykonać polecenie:
SELECT TO_DATE('8-Dec-2005', 'dd-mon-yyyy');

Obsługa znaczników formatu w bazach danych PostgreSQL jest


bardzo zbliżona do obowiązującej na platformie Oracle. Lista do-
stępnych specyfikatorów została zamieszczona w tabeli 3. Wiel-
kość znaków wykorzystanych w ciągu formatu wyznacza sposób
zapisu ciągu wynikowego. Na przykład zastosowanie znacznika
'MON' spowoduje zwrócenie skrótów 'JAN' lub 'FEB'. Znacznik
'Mon' wygeneruje wartości 'Jan' i 'Feb'. Natomiast 'mon' zwraca
tekst 'jan' lub 'feb'. Podczas przekształcania wartości z formatu
tekstowego wielkość znaków nie jest istotna.
Tabela 3. Znaczniki formatowania daty w bazie danych PostgreSQL
Znaczn k formatu Op s
AM lub PM Wyznacznik po y dnia (AM p zed południem PM po południu)
A.M. lub P.M.
BC lub AD Wyznacznik e y (BC p zed naszą e ą AC nasza e a)
B.C. lub A.D.
CC Wiek Dostępny jedynie w odniesieniu do danych wyjściowych
D Dzień tygodnia
DAY Day lub day Nazwa dnia tygodnia
DD Nume dnia w miesiącu
DDD Nume dnia w oku
DY Dy lub dy Sk ót nazwy dnia
FM Eliminuje puste znaki z ciągu wyjściowego Dostępny jedynie
w odniesieniu do danych wyjściowych
FX Wp owadza wymóg dokładnej zgodności danych wejściowych
z ok eślonym fo matem
HH lub HH12 Godzina dnia Wa tości od 1 do 12 Pa amet HH12 jest stosowany
jedynie w odniesieniu do danych wyjściowych
HH24 Godzina dnia Wa tości od 0 do 23
IW Tydzień standa du SO w danym oku Pa amet stosowany
jedynie w odniesieniu do danych wyjściowych

Konwersja daty czasu — PostgreSQL | 41


Tabela 3. Znaczniki formatowania daty w bazie danych PostgreSQL
— ciąg dalszy
Znaczn k formatu Op s
IYY lub IY lub I Ostatnie t zy dwie cyf y lub jedna cyf a oku zapisanego
w standa dzie SO Pa amet stosowany jedynie w odniesieniu
do danych wyjściowych
IYYY Rok standa du SO Pa amet stosowany jedynie w odniesieniu
do danych wyjściowych
J Data kalenda za juliańskiego 01 01 4712 p n e jest uznawany
za dzień o wa tości 1
MI Minuty
MM Nume miesiąca
MON Mon lub mon Sk ót nazwy miesiąca
MONTH Month Nazwa miesiąca
lub month
MS Liczba milisekund
Q Kwa tał oku Pa amet stosowany jedynie w odniesieniu do danych
wyjściowych
RM lub rm Rzymska cyf a odpowiadająca nume owi miesiąca
SP Sufiks p zekształcający wa tość liczbową na zapis słowny
(niezaimplementowany)
SS Sekundy
SSSS Liczba sekund któ e upłynę y od północy
TH lub th Sufiks p zekształcający liczby na wa tości po ządkowe
TZ lub tz Nazwa st efy czasowej
US Liczba mik osekund
W Nume tygodnia w miesiącu (od 1 do 5) Tydzień o wa tości
1 ozpoczyna się pie wszego dnia miesiąca i kończy siódmego
dnia miesiąca Pa amet stosowany jedynie w odniesieniu do
danych wyjściowych
WW Nume tygodnia w oku (od 1 do 53) Pa amet stosowany
jedynie w odniesieniu do danych wyjściowych
Y,YYY Czte ocyf owa wa tość oku ze znakiem p zecinka
YYY lub YY lub Y Ostatnie t zy dwie cyf y lub jedna cyf a oku
YYYY Czte ocyf owa wa tość oku

42 | SQL. Leksykon k eszonkowy


Ostrzeżenie
Do funkcji TO_CHAR nie można przekazywać wartości typu TIME.

Za przekształcanie znacznika czasowego systemu Unix na war-


tość znacznika czasowego PostgreSQL odpowiada funkcja TO_
´TIMESTAMP.
SELECT TO_TIMESTAMP(0);

Dolny zakres dat reprezentowanych przez znaczniki systemu


Unix odpowiada dacie 1 stycznia 1970 r. UTC.

Konwersja daty i czasu — SQL Server


Oprogramowanie SQL Server udostępnia cztery opcje konwersji
wartości daty i czasu. Zazwyczaj najlepszym rozwiązaniem jest
zastosowanie funkcji CONVERT, choć funkcje DATENAME i DATEPART
oferują znacznie większą elastyczność w przekształcaniu dat na
postać tekstową.

Funkcje CAST i SET DATEFORMAT


Oprócz obsługi standardowej funkcji CAST środowisko SQL Server
umożliwia również definiowanie formatu daty i czasu za pomocą
polecenia SET DATEFORMAT:
SET DATEFORMAT dmy
SELECT CAST('1/12/2004' AS datetime)

2004-12-01 00:00:00.000

W przypadku dat zapisanych w formacie niebudzącym wątpliwo-


ści nie ma potrzeby modyfikowania ustawień DATEFORMAT3.

3
Aby włączyć obsługę polskich nazw miesięcy i dni, należy zmienić
domyślne ustawienia językowe, np. za pomocą instrukcji SET LANGUAGE
polski — przyp. tłum.

Konwersja daty czasu — SQL Server | 43


SET DATEFORMAT dmy
SELECT CAST('12 styczeń 2004' AS datetime)

2004-01-12 00:00:00.000

W poleceniu SET DATEFORMAT można umieszczać następujące ar-


gumenty: mdy, dmy, ymd, myd oraz dym.

Funkcja CONVERT
Ogólna konwersja wartości daty i czasu jest realizowana przez
funkcję CONVERT.
CONVERT(wartość_daty[(długość)], wyrażenie[, style])

Drugi (opcjonalny) parametr — style — pozwala na określenie


pierwotnego i docelowego formatu wartości daty i czasu, zależnie
od tego, czy konwersja jest przeprowadzana z ciągu tekstowego,
czy na ciąg tekstowy. Lista obsługiwanych znaczników stylu zo-
stała przedstawiona w tabeli 4.
W następującym przykładzie zademonstrowano jeden ze sposobów
konwersji daty i czasu na ciąg tekstowy i odwrotnie.
SELECT CONVERT(
VARCHAR,
CONVERT(DATETIME, '15 styczeń 1961', 106), 104)

15.01.1961

Aby wyznaczyć długość wynikowego ciągu tekstowego, należy


określić właściwą wartość parametru długość. Natomiast w celu
uzyskania dwucyfrowej wartości roku można odjąć wartość 100
od liczby wyznaczającej styl formatowania.
SELECT CONVERT(DATETIME, '1/1/50', 1)
1950-01-01 00:00:00.000

SELECT CONVERT(DATETIME, '49.1.1', 2)


2049-01-01 00:00:00.000

44 | SQL. Leksykon k eszonkowy


Tabela 4. Znaczniki stylu prezentacji daty i czasu w bazie danych SQL Server
Znaczn k stylu Op s
0,100 Ustawienie domyślne mies dd rrrr gg:miAM (lub PM)
101a Fo mat USA mm/dd/rrrr
102a Fo mat ANS rrrr.mm.dd
103a Fo mat b ytyjski i f ancuski dd/mm/rrrr
104a Fo mat niemiecki dd.mm.rrrr
105a Fo mat włoski dd-mm-rrrr
106a dd mies rrrr
107a mies dd, rrrr
108a gg:mm:ss
9,109 Ustawienie domyślne z uwzględnieniem milisekund
mies dd rrrr gg:mi:ss:mmmAM (lub PM)
110a Fo mat USA mm-dd-rrrr
111a Fo mat japoński rrrr/mm/dd
112a Fo mat SO rrrrmmdd
13,113 Domyślne ustawienie eu opejskie z uwzględnieniem milisekund
dd mies rrrr gg:mm:ss:mmm
114a gg:mi:ss:mmm z 24 godzinnym fo matem czasu
20,120 Podstawowy fo mat ODBC z 24 godzinnym fo matem czasu
rrrr-mm-dd gg:mi:ss
21,121 Podstawowy fo mat ODBC z 24 godzinnym fo matem czasu
i z uwzględnieniem milisekund rrrr-mm-dd gg:mi:ss.mmm
126 Fo mat SO8601 bez znaków spacji rrrr-mm-ddTgg:mm:ss:mmm
130 Fo mat kuwejcki dd mies rrrr gg:mi:ss:mmmAM
131 Fo mat kuwe cki dd/mm/rrrr gg:mi:ss:mmmAM
a
Aby uzyskać dwucyfrowy format roku, należy odjąć 100 od podanej wartości.

W przypadku stosowania dwucyfrowych oznaczeń roku baza da-


nych SQL Server uznaje wartość 2049 za wartość maksymalną.
Lata od 50 do 99 są interpretowane jako 1950 – 1999. Z kolei war-
tości od 00 do 49 są uznawane za lata 2000 – 2049. Taki sposób
interpretacji wartości lat został pokazany w prezentowanych

Konwersja daty czasu — SQL Server | 45


Another random document with
no related content on Scribd:
embarrassing reasons. Thus they give their aid to the sublime
democratic process of eliminating all sense and decency from public
life. Coming out of the mob, they voice the ideas of the mob. The first
of those ideas is that a fraud is somehow charming and reassuring—
in the common phrase, that he is a regular fellow. The second is that
an honest and candid man is dangerous—or, perhaps more
accurately, that there is no such animal.
The newspaper editor who rises above this level encounters the
same incredulous hostility from his fellows and his public that is
encountered by the superior politician, cast into public life by
accident. If he is not dismissed at once as what is now called a
Bolshevik, i. e., one harbouring an occult and unintelligible yearning
to put down the Republic and pull God off His throne, he is assumed
to be engaged in some nefarious scheme of personal
aggrandizement. I point, as examples, to the cases of Fremont
Older, of San Francisco, and Julian Harris, of Columbus, Ga., two
honest, able and courageous men, and both opposed by the vast
majority of their colleagues. The democratic process, indeed, is
furiously inimical to all honourable motives. It favours the man who is
without them, and it puts heavy burdens upon the man who has
them. Going further, it is even opposed to mere competence. The
public servant who masters his job gains nothing thereby. His natural
impatience with the incapacity and slacking of his fellows makes
them his implacable enemies, and he is viewed with suspicion by the
great mass of democrats. But here I enter upon a subject already
discussed at length by a competent French critic, the late Emile
Faguet, of the French Academy, who gave a whole book to it,
translated into English as “The Cult of Incompetence.” Under
democracy, says Faguet, the business of law-making becomes a
series of panics—government by orgy and orgasm. And the public
service becomes a mere refuge for prehensile morons—get yours,
and run.

9.
Footnote on Lame Ducks
Faguet makes no mention of one of the curious and unpleasant
by-products of democracy, of great potency for evil in both England
and the United States: perhaps, for some unknown reason, it is less
a nuisance in France. I allude to the sinister activity of professional
politicians who, in the eternal struggle for office and its rewards,
have suffered crushing defeats, and are full of rage and bitterness.
All politics, under democracy, resolves itself into a series of dynastic
questions: the objective is always the job, not the principle. The
defeated candidate commonly takes his failure very badly, for it
leaves him stripped bare. In most cases his fellow professionals take
pity on him and put him into some more or less gaudy appointive
office, to preserve his livelihood and save his face: the Federal
commissions that harass the land are full of such lame ducks, and
they are not unknown on the Federal bench. But now and then there
appears one whose wounds are too painful to be assuaged by such
devices, or for whom no suitable office can be found. This majestic
victim not infrequently seeks surcease by a sort of running amok.
That is to say, he turns what remains of his influence with the mob
into a weapon against the nation as a whole, and becomes a chronic
maker of trouble. The names of Burr, Clay, Calhoun, Douglas,
Blaine, Greeley, Frémont, Roosevelt and Bryan will occur to every
attentive student of American history. There have been many similar
warlocks on lower levels; they are familiar in the politics of every
American county.
Clay, like Bryan after him, was three times a candidate for the
Presidency. Defeated in 1824, 1832 and 1840, he turned his back
upon democracy, and became the first public agent and attorney for
what are now called the Interests. When he died he was the darling
of the Mellons, Morgans and Charlie Schwabs of his time. He
believed in centralization and in the blessings of a protective tariff.
These blessings the American people still enjoy. Calhoun, deprived
of the golden plum by an unappreciative country, went even further.
He seems to have come to the conclusion that its crime made it
deserve capital punishment. At all events, he threw his strength into
the plan to break up the Union. The doctrine of Nullification owed
more to him than it owed to any other politician, and after 1832,
when his hopes of getting into the White House were finally
extinguished, he devoted himself whole-heartedly to preparing the
way for the Civil War. He was more to blame for that war, in all
probability, than any other man. But if he had succeeded Jackson
the chances are that he would have sung a far less bellicose tune.
The case of Burr is so plain that it has even got into the school
history-books. If he had beaten Jefferson in 1800 there would have
been no duel with Hamilton, no conspiracy with Blennerhassett, no
trial for treason, and no long exile and venomous repining. Burr was
an able man, as politicians go under democracy, and the young
Republic stood in great need of his peculiar talents. But his failure to
succeed Adams made a misanthrope of him, and his misanthropy
was vented upon his country, and more than once brought it to the
verge of disaster.
There have been others like him in our own time: Blaine,
Frémont, Hancock, Roosevelt, Bryan. If Blaine had been elected in
1876 he would have ceased to wave the bloody shirt; as it was, he
was still waving it, recklessly and obscenely, in 1884. No man
laboured more assiduously to keep alive the hatreds flowing out of
the Civil War; his whole life was poisoned by his failure to reach the
White House, and his dreadful cramps and rages led him into a long
succession of obviously anti-social acts. Roosevelt went the same
route. His débâcle in 1912 converted him into a sort of political killer,
and until the end of his life he was constantly on the warpath, looking
for heads to crack. The outbreak of the World War in 1914 brought
him great embarrassment, for he had been the most ardent
American exponent, for years past, of what was then generally
regarded as the German scheme of things. For a few weeks he was
irresolute, and seemed likely to stick to his guns. But then,
perceiving a chance to annoy and damage his successful enemy,
Wilson, he swallowed the convictions of a lifetime, and took the other
side. That his ensuing uproars had evil effects must be manifest.
Regardless of the consequences, either at home or abroad, he kept
on arousing the mob against Wilson, and in the end he helped more
than any other man to force the United States into the war. His aim, it
quickly appeared, was to turn the situation to his own advantage: he
made desperate and shameless efforts to get a high military
command at the front—a post for which he was plainly unfitted.
When Wilson, still smarting from his attack, vetoed this scheme, he
broke into fresh rages, and the rest of his life was more pathological
than political. The fruits of his reckless demagogy are still with us.
Bryan was even worse. His third defeat, in 1908, convinced even
so vain a fellow that the White House was beyond his reach, and so
he consecrated himself to reprisals upon those who had kept him out
of it. He saw very clearly who they were: the more intelligent minority
of his countrymen. It was their unanimous opposition that had thrice
thrown the balance against him. Well, he would now make them
infamous. He would raise the mob, which still admired him, against
everything they regarded as sound sense and intellectual decency.
He would post them as sworn foes to all true virtue and true religion,
and try, if possible, to put them down by law. There ensued his
frenzied campaign against the teaching of evolution—perhaps the
most gross attack upon human dignity and decorum ever made by a
politician, even under democracy, in modern times. Those who
regarded him, in his last years, as a mere religious fanatic were far in
error. It was not fanaticism that moved him, but hatred. He was an
ambulent boil, as anyone could see who encountered him face to
face. His theological ideas were actually very vague; he was quite
unable to defend them competently under Clarence Darrow’s cross-
examination. What moved him was simply his colossal lust for
revenge upon those he held to be responsible for his downfall as a
politician. He wanted to hurt them, proscribe them; if possible,
destroy them. To that end he was willing to sacrifice everything else,
including the public tranquillity and the whole system of public
education. He passed out of life at last at a temperature of 110
degrees, his eyes rolling horribly toward 1600 Pennsylvania avenue,
N.W. and its leaky copper roof. In the suffering South his fever lives
after him. The damage he did was greater than that done by
Sherman’s army.
Countries under the hoof of despotism escape such lamentable
exhibitions of human frailty. Unsuccessful aspirants for the crown are
either butchered out of hand or exiled to Paris, where tertiary lues
quickly disposes of them. The Crown Prince, of course, has his
secret thoughts, and no doubt they are sometimes homicidal, but he
is forced by etiquette to keep them to himself, and so the people are
not annoyed and injured by them. He cannot go about praying
publicly that the King, his father, come down with endocarditis, nor
can he denounce the old gentleman as an idiot and advocate his
confinement in a maison de santé. Everyone, of course, knows what
his hopes and yearnings are, but no one has to listen to them. If he
voices them at all it is only to friendly and discreet members of the
diplomatic corps and to the ladies of the half and quarter worlds.
Under democracy, they are bellowed from every stump.
DEMOCRACY AND LIBERTY

III
DEMOCRACY AND LIBERTY

1.
The Will to Peace
Whenever the liberties of Homo vulgaris are invaded and made
a mock of in a gross and contemptuous manner, as happened, for
example, in the United States during the reign of Wilson, Palmer,
Burleson and company, there are always observers who marvel that
he bears the outrage with so little murmuring. Such observers only
display their unfamiliarity with the elements of democratic science.
The truth is that the common man’s love of liberty, like his love of
sense, justice and truth, is almost wholly imaginary. As I have
argued, he is not actually happy when free; he is uncomfortable, a bit
alarmed, and intolerably lonely. He longs for the warm, reassuring
smell of the herd, and is willing to take the herdsman with it. Liberty
is not a thing for such as he. He cannot enjoy it rationally himself,
and he can think of it in others only as something to be taken away
from them. It is, when it becomes a reality, the exclusive possession
of a small and disreputable minority of men, like knowledge, courage
and honour. A special sort of man is needed to understand it, nay, to
stand it—and he is inevitably an outlaw in democratic societies. The
average man doesn’t want to be free. He simply wants to be safe.
Nietzsche, with his usual clarity of vision, saw the point clearly.
Liberty, he used to say, was something that, to the general, was too
cold to be borne. Nevertheless, he apparently believed that there
was an unnatural, drug-store sort of yearning for it in all men, and so
he changed Schopenhauer’s will-to-live into a will-to-power, i. e., a
will-to-free-function. Here he went too far, and in the wrong direction:
he should have made it, on the lower levels, a will-to-peace. What
the common man longs for in this world, before and above all his
other longings, is the simplest and most ignominious sort of peace—
the peace of a trusty in a well-managed penitentiary. He is willing to
sacrifice everything else to it. He puts it above his dignity and he
puts it above his pride. Above all, he puts it above his liberty. The
fact, perhaps, explains his veneration for policemen, in all the forms
they take—his belief that there is a mysterious sanctity in law,
however absurd it may be in fact. A policeman is a charlatan who
offers, in return for obedience, to protect him (a) from his superiors,
(b) from his equals, and (c) from himself. This last service, under
democracy, is commonly the most esteemed of them all. In the
United States, at least theoretically, it is the only thing that keeps ice-
wagon drivers, Y. M. C. A. secretaries, insurance collectors and other
such human camels from smoking opium, ruining themselves in the
night clubs, and going to Palm Beach with Follies girls. It is a
democratic invention.
Here, though the common man is deceived, he starts from a
sound premiss: to wit, that liberty is something too hot for his hands
—or, as Nietzsche put it, too cold for his spine. Worse, he sees in it
something that is a weapon against him in the hands of his enemy,
the man of superior kidney. Be true to your nature, and follow its
teachings: this Emersonian counsel, it must be manifest, offers an
embarrassing support to every variety of the droit de seigneur. The
history of democracy is a history of efforts to force successive
minorities to be untrue to their nature. Democracy, in fact, stands in
greater peril of the free spirit than any sort of despotism ever heard
of. The despot, at least, is always safe in one respect: his own belief
in himself cannot be shaken. But democracies may be demoralized
and run amok, and so they are in vast dread of heresy, as a Sunday-
school superintendent is in dread of scarlet women, light wines and
beer, and the unreadable works of Charles Darwin. It would be
unimaginable for a democracy to submit serenely to such gross
dissents as Frederick the Great not only permitted, but even
encouraged. Once the mob is on the loose, there is no holding it. So
the subversive minority must be reduced to impotence; the heretic
must be put down.
If, as they say, one of the main purposes of all civilized
government is to preserve and augment the liberty of the individual,
then surely democracy accomplishes it less efficiently than any other
form. Is the individual worth thinking of at all? Then the superior
individual is worth more thought than his inferiors. But it is precisely
the superior individual who is the chief victim of the democratic
process. It not only tries to regulate his acts; it also tries to delimit his
thoughts; it is constantly inventing new forms of the old crime of
imagining the King’s death. The Roman lex de majestate was put
upon the books, not by an emperor, nor even by a consul, but by
Saturninus, a tribune of the people. Its aim was to protect the state
against aristocrats, i. e., against free spirits, each holding himself
answerable only to his own notions. The aim of democracy is to
break all such free spirits to the common harness. It tries to iron
them out, to pump them dry of self-respect, to make docile John
Does of them. The measure of its success is the extent to which
such men are brought down, and made common. The measure of
civilization is the extent to which they resist and survive. Thus the
only sort of liberty that is real under democracy is the liberty of the
have-nots to destroy the liberty of the haves.
This liberty is supposed, in some occult way, to enhance human
dignity. Perhaps, in one of its aspects, it actually does. The have-not
gains something valuable when he acquires the delusion that he is
the equal of his betters. It may not be true—but even a delusion, if it
augments the dignity of man, is something. Certain apparent realities
grow out of it: the peasant no longer pulls his forelock when he
meets the baron, he is free to sue and be sued, he may denounce
Huxley as a quack. But the thing, alas, works both ways. As one pan
of the scale goes up, the other comes down. If democracy really
loves the dignity of man, then it kills the thing it loves. Where it
prevails, not even the King can be dignified in any rational sense: he
becomes Harding, jabbering of normalcy, or Coolidge, communing
with his preposterous Tabakparlement around the stove. Nor the
Pope: he becomes a Methodist bishop in a natty business-suit, and
with a toothbrush moustache. Nor the Generalissimo: he becomes
Pershing, haranguing Rotary, and slapping the backs of his fellow
Elks.
2.
The Democrat as Moralist
Liberty gone, there remains the majestic phenomenon of
democratic law. A glance at it is sufficient to show the identity of
democracy and Puritanism. The two, indeed, are but different facets
of the same gem. In the psyche they are one. For both get their
primal essence out of the inferior man’s fear and hatred of his
betters, born of his observation that, for all his fine theories, they are
stronger and of more courage than he is, and that as they go through
this dreadful world they have a far better time. Thus envy comes in; if
you overlook it you will never understand democracy, and you will
never understand Puritanism. It is not, of course, a speciality of
democratic man. It is the common possession of all men of the
ignoble and incompetent sort, at all times and everywhere. But it is
only under democracy that it is liberated; it is only under democracy
that it becomes the philosophy of the state. What the human race
owes to the old autocracies, and how little, in these democratic days,
it is disposed to remember the debt! Their service, perhaps, was a
by-product of a purpose far afield, but it was a service none the less:
they held the green fury of the mob in check, and so set free the
spirit of superior man. Their collapse under Flavius Honorius left
Europe in chaos for four hundred years. Their revival under
Charlemagne made the Renaissance possible, and the modern age.
What the thing was that they kept from the throat of civilization has
been shown more than once in these later days, by the failure of
their enfeebled successors. I point to the only too obvious examples
of the French and Russian Revolutions. The instant such a
catastrophe liberates the mob, it begins a war to the death upon
superiority of every kind—not only upon the kind that naturally
attaches to autocracy, but even upon the kind that stands in
opposition to it. The day after a successful revolution is a blue day
for the late autocrat, but it is also a blue day for every other superior
man. The murder of Lavoisier was a phenomenon quite as
significant as the murder of Louis XVI. We need no scientists in
France, shouted MM. of the Revolutionary Tribunal. Wat Tyler, four
centuries before, reduced it to an even greater frankness and
simplicity: he hanged every man who confessed to being able to
read and write.
Democracy, as a political scheme, may be defined as a device
for releasing this hatred born of envy, and for giving it the force and
dignity of law. Tyler, in the end, was dispatched by Walworth; under
democracy he becomes almost the ideal Good Man. It is very difficult
to disentangle the political ideas of this anthropoid Good Man from
his theological ideas: they constantly overlap and coalesce, and the
democratic state, despite the contrary example of France, almost
always shows a strong tendency to be also a Puritan state. Puritan
legislation, especially in the field of public law, is a thing of many
grandiose pretensions and a few simple and ignoble realities. The
Puritan, discussing it voluptuously, always tries to convince himself
(and the rest of us) that it is grounded upon altruistic and evangelical
motives—that its aim is to work the other fellow’s benefit against the
other fellow’s will. Such is the theory behind Prohibition,
comstockery, vice crusading, and all its other familiar devices of
oppression. That theory, of course, is false. The Puritan’s actual
motives are (a) to punish the other fellow for having a better time in
the world, and (b) to bring the other fellow down to his own unhappy
level. Such are his punitive and remedial purposes. Primarily, he is
against every human act that he is incapable of himself—safely. The
adverb tells the whole story. The Puritan is surely no ascetic. Even in
the great days of the New England theocracy it was impossible to
restrain his libidinousness: his eyes rolled sideways at buxom
wenches quite as often as they rolled upward to God. But he is
incapable of sexual experience upon what may be called a civilized
plane; it is impossible for him to manage the thing as a romantic
adventure; in his hands it reduces itself to the terms of the barnyard.
Hence the Mann Act. So with dalliance with the grape. He can have
experience of it only as a furtive transaction behind the door, with a
dreadful headache to follow. Hence Prohibition. So, again, with the
joys that come out of the fine arts. Looking at a picture, he sees only
the model’s pudenda. Reading a book, he misses the ordeals and
exaltations of the spirit, and remembers only the natural functions.
Hence comstockery.
His delight in his own rectitude is grounded upon a facile
assumption that it is difficult to maintain—that the other fellow, being
deficient in God’s grace, is incapable of it. So he venerates himself,
in the moral department, as an artist of unusual talents, a virtuoso of
virtue. His error consists in mistaking a weakness for a merit, an
inferiority for a superiority. It is not actually a sign of spiritual
eminence to be moral in the Puritan sense: it is simply a sign of
docility, of lack of enterprise and originality, of cowardice. The
Puritan, once his mainly imaginary triumphs over the flesh and the
devil are forgotten, always turns out to be a poor stick of a man—in
brief, a natural democrat. His triumphs in the field of government are
as illusory as his triumphs as metaphysician and artist. No Puritan
has ever painted a picture worth looking at, or written a symphony
worth hearing, or a poem worth reading—and I am not forgetting
John Milton, who was not a Puritan at all, but a libertarian, which is
the exact opposite. The whole Puritan literature is comprised in “The
Pilgrim’s Progress.” Even in the department wherein the Puritan is
most proud of himself, i. e., that of moral legislation, he has done
only second and third rate work. His fine schemes for bringing his
betters down to his own depressing level always turn out badly. In
the whole history of human law-making there is no record of a failure
worse than that of Prohibition in the United States. Since the first
uprising of the lower orders, the modern age has seen but one
genuinely valuable contribution to moral legislation: I allude, of
course, to the Code Napoléon. It was concocted by a committee of
violent anti-Puritans, and in the full tide of a bitter reaction against
democracy.
If democracy had not lain implicit in Puritanism, Puritanism would
have had to invent it. Each is necessary to the other. Democracy
provides the machinery that Puritanism needs for the quick and
ruthless execution of its preposterous inventions. Facing autocracy, it
faces insuperable difficulties, for its spokesmen can convince the
King only in case he is crazy, and even when he is crazy he is
commonly restrained by his ministers. But the mob is easy to
convince, for what Puritanism has to say to it is mainly what it
already believes: its politics is based upon the same brutal envies
and quaking fears that lie under the Puritan ethic. Moreover, the
political machinery through which it functions provides a ready
means of translating such envies and fears into action. There is need
only to sound the alarm and take a vote: the debate is over the
moment the majority has spoken. The fact explains the ferocious
haste with which, in democratic countries, even the most strange
and dubious legislative experiments are launched. Haste is
necessary, lest even the mob be shaken by sober second thought.
And haste is easy, for the appeal to the majority is officially the last
appeal of all, and when it has been made there is the best of
excuses for cutting off debate. I have described the precise process
in a previous section. Fanatics inflame the mob, and thereby alarm
the scoundrels set up to make laws in its name. The scoundrels
precipitately do the rest. The Fathers were not unaware of this
danger in the democratic scheme. They sought to counteract it by
establishing upper chambers, removed by at least one degree from
the mob’s hot rages. Their precaution has been turned to naught by
depriving the upper chambers of that prophylactic remoteness, and
exposing them to the direct and unmitigated blast.
It must be plain that this process of law-making by orgy, with
fanatics supplying the motive-power and unconscionable knaves
steering the machine, is bound to fill the statute-books with
enactments that have no rational use or value save that of serving as
instruments of psychopathological persecution and private revenge.
This is found to be the case, in fact, in almost every American State.
The grotesque anti-syndicalist laws of California, the anti-evolution
laws of Tennessee and Mississippi, and the acts for the enforcement
of Prohibition in Ohio and Indiana are typical. They involve gross
invasions of the most elementary rights of the free citizen, but they
are popular with the mob because they have a virtuous smack and
provide it with an endless succession of barbarous but thrilling
shows. Their chosen victims are men the mob naturally envies and
hates—men of unusual intelligence and enterprise, men who regard
their constitutional liberties seriously and are willing to go to some
risk and expense to defend them. Such men are inevitably unpopular
under democracy, for their qualities are qualities that the mob wholly
lacks, and is uneasily conscious of lacking: it thus delights in seeing
them exposed to slander and oppression, and railroaded to prison.
There is always a district attorney at hand to launch the prosecution,
for district attorneys are invariably men who aspire to higher office,
and no more facile way to it is to be found than by assaulting and
destroying a man above the general. As I have shown, many an
American Congressman comes to Washington from a district
attorney’s office: you may be sure that he is seldom promoted
because he has been jealous of the liberties of the citizen. Many a
judge reaches the bench by the same route—and thereafter
benignantly helps along his successors. The whole criminal law in
America thus acquires a flavour of fraud. It is constantly embellished
and reinforced by fanatics who have discovered how easy it is to hurl
missiles at their enemies and opponents from behind ranks of
policemen. It is executed by law officers whose private prosperity
runs in direct ratio to their reckless ferocity. And the business is
applauded by morons whose chief delight lies in seeing their betters
manhandled and humiliated. Even the ordinary criminal law is so
carried out—that is, when the accused happens to be conspicuous
enough to make it worth while. Every district attorney in America
goes to his knees every night to ask God to deliver a Thaw or a Fatty
Arbuckle into his hands. In the criminal courts a rich man not only
enjoys none of the advantages that Liberals and other defenders of
democracy constantly talk of; he is under very real and very heavy
burdens. The defence that Thaw offered in the White case would
have got a taxi-driver acquitted in five minutes. And had Arbuckle
been a waiter, no district attorney in the land would have dreamed of
putting him on trial for first-degree murder.
For such foul and pestiferous proceedings, of course, moral
excuses are always offered. The district attorney is an altruist whose
one dream is Law Enforcement; he cannot be terrified by the power
of money; he is the spokesman of the virtuous masses against the
godless and abominable classes. The same buncombe issues from
the Prohibitionists, comstocks, hunters of Bolshevists, and other
such frauds. Its hollowness is constantly revealed. The
Prohibitionists, when they foisted their brummagem cure-all upon the
country under cover of the war hysteria, gave out that their advocacy
of it was based upon a Christian yearning to abate drunkenness, and
so abolish crime, poverty and disease. They preached a millennium,
and no doubt convinced hundreds of thousands of naïve and
sentimental persons, not themselves Puritans, nor even democrats.
That millennium, as everyone knows, has failed to come in. Not only
are crime, poverty and disease undiminished, but drunkenness itself,
if the police statistics are to be believed, has greatly increased. The
land rocks with the scandal. Prohibition has made the use of alcohol
devilish and even fashionable, and so vastly augmented the number
of users. The young of both sexes, mainly innocent of the cup under
license, now take to it almost unanimously. In brief, Prohibition has
not only failed to work the benefits that its proponents promised in
1917; it has brought in so many new evils that even the mob has
turned against it. But do the Prohibitionists admit the fact frankly, and
repudiate their original nonsense? They do not. On the contrary, they
keep on demanding more and worse enforcement statutes—that is
to say, more and worse devices for harassing and persecuting their
opponents. The more obvious the failure becomes, the more
shamelessly they exhibit their genuine motives. In plain words, what
moves them is the psychological aberration called sadism. They lust
to inflict inconvenience, discomfort, and, whenever possible,
disgrace upon the persons they hate—which is to say, upon
everyone who is free from their barbarous theological superstitions,
and is having a better time in the world than they are. They cannot
stop the use of alcohol, nor even appreciably diminish it, but they
can badger and annoy everyone who seeks to use it decently, and
they can fill the jails with men taken for purely artificial offences, and
they can get satisfaction thereby for the Puritan yearning to browbeat
and injure, to torture and terrorize, to punish and humiliate all who
show any sign of being happy. And all this they can do with a safe
line of policemen and judges in front of them; always they can do it
without personal risk.
It is this freedom from personal risk that is the secret of the
Prohibitionists’ continued frenzy, despite the complete collapse of
Prohibition itself. They know very well that the American mob, far
from being lawless, is actually excessively tolerant of written laws
and judicial fiats, however plainly they violate the fundamental rights
of free men, and they know that this tolerance is sufficient to protect
them from what, in more liberal and enlightened countries, would be
the natural consequences of their anti-social activity. If they had to
meet their victims face to face, there would be a different story to tell.
But, like their brethren, the comstocks and the professional patriots,
they seldom encounter this embarrassment. Instead, they turn the
officers of the law to the uses of their mania. More, they reinforce the
officers of the law with an army of bravos sworn to take their orders
and do their bidding—the army of so-called Prohibition enforcement
officers, mainly made up of professional criminals. Thus, under
democracy, the normal, well-behaved, decent citizen—the Forgotten
Man of the late William Graham Sumner—is beset from all sides,
and every year sees an augmentation of his woes. In order to satisfy
the envy and hatred of his inferiors and the blood lust of a pack of
irresponsible and unconscionable fanatics, few of them of any dignity
as citizens or as men and many of them obviously hypocritical and
corrupt, this decent citizen is converted into a criminal for performing
acts that are natural to men of his class everywhere, and police and
courts are degraded to the abhorrent office of punishing him for
them. Certainly it should not be surprising that such degrading work
has greatly diminished the authority of both—that Prohibition has
made the courts disreputable and increased general crime. A judge
who jails a well-disposed and inoffensive citizen for violating an
unjust and dishonest law may be defended plausibly, perhaps, by
legal casuistry, but it is very hard to make out a case for him as a
self-respecting man. Like the ordinary politician, he puts his job
above his professional dignity and his common decency. More than
one judge, unable to square such loathsome duties with his private
notions of honor, has stepped down from the bench, and left the
business to a successor who was more a lawyer and less a man.

3.
Where Puritanism Fails
Under the pressure of fanaticism, and with the mob complacently
applauding the show, democratic law tends more and more to be
grounded upon the maxim that every citizen is, by nature, a traitor, a
libertine, and a scoundrel. In order to dissuade him from his evil-
doing the police power is extended until it surpasses anything ever
heard of in the oriental monarchies of antiquity. In many American
States—for example, California and Pennsylvania—it is almost a
literal fact that the citizen has no rights that the police are bound to
respect. These awful powers, of course, are not exercised against all
citizens. The man of influence with the reigning politicians, the
supporter of the prevailing delusions, and the adept hypocrite—these
are seldom molested. But the man who finds himself in an unpopular
minority is at the mercy of the Polizei, and the easiest way to get into
such a minority is to speak out boldly for the Bill of Rights. Men have
been clubbed and jailed in Pennsylvania for merely mentioning it;
scores have been jailed for protesting publicly against its violation.
Here the attack was at least frank, and, to that extent, honest; more
often it is made disingenuously, and to the tune of pious snuffling.
First an unpopular man is singled out for persecution, and then a
diligent search is made, with the police and prosecuting officers and
even the courts co-operating, for a law that he can be accused of
breaking. The enormous multiplicity of sumptuary and inquisitorial
statutes makes this quest easy. The prisoner begins his progress
through the mill of justice under a vague accusation of disorderly
conduct or disturbing the peace; he ends charged with crimes that
carry staggering penalties. There are statutes in many States,
notably California, that explore his mind, and lay him by the heels for
merely thinking unpopular thoughts. Once he is accused of such
heresy, the subsequent proceedings take on the character of a
lynching. His constitutional rights are swept away as of no validity,
and all the ancient rules of the Common Law—for example, those
against double jeopardy and hearsay—are suspended in order to
fetch him. Many of the newer statutes actually suspend these
safeguards formally, and though they are to that extent plainly
unconstitutional, the higher courts have not interfered with their
execution. The Volstead Act, for instance, destroys the constitutional
right to a jury trial, and in its administration the constitutional
prohibition of unreasonable searches and seizures and the rule
against double jeopardy are habitually violated. But no protest
comes save from specialists in liberty, most of whom are so busy
keeping out of jail themselves that their caveats are feeble and
ineffective. The mob is always in favour of the prosecution, for the
prosecution is giving the show. In the face of its applause, very few
American judges have the courage to enforce the constitutional
guarantees—and still fewer prosecuting attorneys. As I have said, a
prosecuting attorney’s success depends very largely upon his
ferocity. American practice permits him an extravagance of attack
that would land him in jail, and perhaps even in a lunatic asylum, in
any other country, and the more passionately he indulges in it the
more certain becomes his promotion to higher office, including the
judicial. Perhaps a half of all American judges, at some time or other,
have been prosecuting officers. They carry to the bench the habits of
mind acquired on the other side of the bar; they seem to be generally
convinced that any man accused of crime is ipso facto guilty, and
that if he is known to harbour political heresies he is guilty of a sort of
blasphemy when he mentions his constitutional rights.
This doctrine that a man who stands in contempt of the
prevailing ideology has no rights under the law is so thoroughly
democratic that in the United States it is seldom questioned save by
romantic fanatics, robbed of their wits by an uncritical reading of the
Fathers. It not only goes unchallenged otherwise; it is openly stated
and defended, and by high authorities. I point, for example, to the
Right Rev. Luther B. Wilson, who, as a bishop of the Methodist
Episcopal Church, occupies an office that is both ecclesiastical and
political, and is of dignity and puissance in both fields. Some time
ago this Wilson was invited to preach in the Cathedral of St. John the
Divine in New York—a delicate acknowledgment of his importance
by his rival prelate of the Anglican Church, Monsignor Manning. His
sermon, in brief, was a passionate plea for the putting down of
heresy, law or no law, Constitution or no Constitution. “Atheism,” he
declared, “is not only folly, but to the state a traitor. It does not
deserve a place and should not be defended by any specious claim
for immunity under the constitutional guaranties of the right of free
speech.” This bloodthirsty and astounding dictum, though it came
from a Christian ecclesiastic of a rank higher than that attained by
Christ Himself, seemed so natural that it attracted no notice
whatever. Not a single New York newspaper challenged it; even the
Liberal weeklies let it pass as too obvious for cavil. A week or so
later it was printed with approbation in all the Methodist
denominational organs, and since then many other bishops of that
sect have ratified it. The same doctrine is frequently stated plainly by
high legal officers, especially when a man accused of political heresy
is on trial—usually, of course, for an alleged infraction of the ordinary
law. As I have said in a previous chapter, it was applied to atheists,
exactly as Bishop Wilson applied it, during the celebrated Scopes
trial at Dayton, Tenn. Arthur Garfield Hays, defending Scopes, arose
at one point in the proceedings to protest that they were going
beyond the bounds of due process—that his client was not getting a
fair and impartial trial within the meaning of the Constitution. At once
the prosecuting attorney general, Stewart, answered candidly that an
atheist had no right to a fair trial in Tennessee, and the judge on the
bench, the learned Raulston, approved with a nod. Hays, who is a
Liberal, was so overcome that he sank in his place with a horrified
gurgle, but the Tennesseans in the courtroom saw nothing strange in
Stewart’s reply. They knew very well that, in all the States South of
the Potomac, save only Louisiana, Catholics, Negroes and all the
persons unable to speak the local dialects fluently shared the
disability of atheists. And if they were learned in American law, they
knew that anti-Catholics faced the same disability in Massachusetts,
like anti-Semites in New York, and that in every State there were
classes similarly proscribed. I do not here allude to the natural
difficulty that every man of notoriously heterodox ideas must
encounter every time he faces a jury, which is to say, twelve men of
limited information and intelligence, chosen precisely because of
their lack of intellectual resilience. I am speaking of the hostility he
must look for in prosecuting officers and judges, and in the
newspapers that sit in judgment upon them and largely determine
their fortunes. I am speaking of what has come to be a settled
practice in American criminal law.
It is difficult, indeed, for democracy to reconcile itself to what may
be called common decency. By this common decency I mean the
habit, in the individual, of viewing with tolerance and charity the acts
and ideas of other individuals—the habit which makes a man a
reliable friend, a generous opponent, and a good citizen. The
democrat, despite his strong opinion to the contrary, is seldom a
good citizen. In that sense, as in most others, he falls distressfully
short. His eagerness to bring all his fellow-citizens, and especially all
those who are superior to him, into accord with his own dull and
docile way of thinking, and to force it upon them when they resist,
leads him inevitably into acts of unfairness, oppression and
dishonour which, if all men were alike guilty of them, would quickly
break down that mutual trust and confidence upon which the very
structure of civilized society rests. Where democratic man is so firmly
in possession of his theoretical rights that resistance to him is
hopeless, as it is in large areas of the United States, he actually
produces this disaster. To live in a community so cursed is almost
impossible to any man who does not accept the democratic
epistemology and the Puritan ethic, which is to say, to any well-
informed and self-respecting man. He is harassed in so many small
ways, and with such depressing violence and lack of decency, that
he is usually compelled to clear out. This fact, in large part, explains
the cultural collapse of New England and the marked cultural
backwardness of whole regions in the South and Middle West. A
man of sound sense, born into the Tennessee hinterland, not only
feels lonesome as he comes to maturity; he also feels unsafe. The
morons surrounding him hate him, and if they can’t lay him for mere
heresy, they will wait their chance and lay him for burning barns, for
poisoning wells, or for taking Russian gold. So he departs.
This irreconcilable antagonism between democratic Puritanism
and common decency is probably responsible for the uneasiness
and unhappiness that are so marked in American life, despite the
great material prosperity of the United States. Theoretically, the
American people should be happier than any other; actually, they are
probably the least happy in Christendom. The trouble with them is
that they do not trust one another—and without mutual trust there
can be no ease, and no genuine happiness. What avails it for a man
to have money in the bank and a Ford in his garage if he knows that
his neighbours on both sides are watching him through knotholes,
and that the pastor of the tabernacle down the road is planning to
have him sent to jail? The thing that makes life charming is not
money, but the society of our fellow men, and the thing that draws us
toward our fellow men is not admiration for their inner virtues, their

You might also like