Zielony Smok - logo witryny

Apache Derby: funkcja CAST

Opis

Funkcja rzutująca dane z jednego typu do drugiego. Można użyć parametrów i wartości NULL.

Składnia

CAST([typ1 | NULL | ?] AS typ2)

Ograniczenia

  • ‘typ1’ może być wyrażeniem
  • ‘typ1’ nazywany jest typem wejściowym (źródłowym), a ‘typ2’ typem wyjściowym (docelowym)

Konwersja

We wpisie konwersja. Podano tabelę przedstawiającą możliwości konwersji. Jeśli na przecięciu typów jest ‘T’ to znaczy, że konwersja między typami jest dozwolona. W takim przypadku można użyć funkcji CAST, ale należy zwrócić uwagę na ewentualne niekompatybilności pomiędzy wielkościami.

Gdy konwersja jest dozwolona – aby uniknąć niespodzianek – zajrzyj do opisów obu typów.

Konwersja typów daty i czasu

  • DATE rzutowane do TIMESTAMP – czas w TIMESTAMP jest 00:00:00
  • TIME rzutowane do TIMESTAMP – wstawiana data jest CURRENT_DATE (czas wykonywania rzutowania)
Przykład w klasie R078_CAST.java
package aderby.functions.cast;

import aderby.DerbyUtil;

import java.io.*;
import java.sql.*;

public class R078_CAST {
    private static final String baza = "C:/Przyklady/r078_cast";
    private static final String skrypt = "aderby/src/resources/sqls/temperatura2.sql";
    private static final String selectsql = "SELECT val, CAST (val AS DECIMAl(5,3)) FROM temperatura";

    public static void main(String[] args) {
        DerbyUtil.startDerbyEngine(DerbyUtil.embdriver);
        Connection con = DerbyUtil.connectEmbeddedDB(baza, ";create=true");
        DerbyUtil.jdbcRunScript(skrypt, con);
        Statement stat = null;
        ResultSet rs = null;
        try {
            stat = con.createStatement();
            rs = stat.executeQuery(selectsql);
            while (rs.next()) {
                System.out
                        .println(rs.getString(1) + "   " + rs.getBigDecimal(2));
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        DerbyUtil.close(stat);
        DerbyUtil.close(con);
        DerbyUtil.close(rs);
        DerbyUtil.shutdownEmbeddedDB(baza);
        DerbyUtil.shutdownDerbyEngine();
        DerbyUtil.dropDatabase(new File(baza));
    }
}
Plik temperatura2.sql
CREATE TABLE temperatura(
            id INTEGER NOT NULL PRIMARY KEY GENERATED ALWAYS AS 
                    IDENTITY(START WITH 1, INCREMENT BY 1),
            czujnik INTEGER,
            val DOUBLE
);
CREATE INDEX i_czujnik ON temperatura (czujnik ASC);
CREATE INDEX i_val ON temperatura (val ASC);
INSERT INTO temperatura (czujnik, val) VALUES (2, 37.8);
INSERT INTO temperatura (czujnik, val) VALUES (1, 39.7);
INSERT INTO temperatura (czujnik, val) VALUES (3, 36.6);
INSERT INTO temperatura (czujnik, val) VALUES (3, 33.2);
INSERT INTO temperatura (czujnik, val) VALUES (2, 39.2);
INSERT INTO temperatura (czujnik, val) VALUES (2, 40.6);
INSERT INTO temperatura (czujnik, val) VALUES (2, 41.2);
INSERT INTO temperatura (czujnik, val) VALUES (1, 40.1);
INSERT INTO temperatura (czujnik, val) VALUES (1, 39.8);
INSERT INTO temperatura (czujnik, val) VALUES (2, 38.9);
INSERT INTO temperatura (czujnik, val) VALUES (1, 38.3);
INSERT INTO temperatura (czujnik, val) VALUES (2, 37.9);
INSERT INTO temperatura (czujnik, val) VALUES (2, 37.4);
INSERT INTO temperatura (czujnik, val) VALUES (3, 37.1);
INSERT INTO temperatura (czujnik, val) VALUES (3, 36.8);
INSERT INTO temperatura (czujnik, val) VALUES (3, 36.7);
INSERT INTO temperatura (czujnik, val) VALUES (1, 36.6);

Wynik

33.2   33.200
36.6   36.600
36.6   36.600
36.7   36.700
36.8   36.800
37.1   37.100
37.4   37.400
37.8   37.800
37.9   37.900
38.3   38.300
38.9   38.900
39.2   39.200
39.7   39.700
39.8   39.800
40.1   40.100
40.6   40.600
41.2   41.200

Pliki do ściągnięcia

Aktualny (tworzony narastająco) plik module-info.java

Aktualny (tworzony narastająco) plik DerbyUtil.java

Pliki tworzone narastająco zastępują poprzednie pliki o tej samej nazwie i działają dla wszystkich wcześniej opublikowanych przykładów we wszystkich wpisach w projekcie. W przypadku pliku module-info.java może być potrzebne skreślenie niepotrzebnych wpisów.