sql >> データベース >  >> RDS >> SQLite

SQLiteで列のデータ型を確認する5つの方法

    SQLiteでは、テーブルの構造を確認する方法がかなりあります。したがって、そのテーブル内の列のデータ型を確認する方法はかなりあります。

    クエリで返された列のデータ型を確認できる関数もあります。

    SQLiteで列のデータ型を確認する5つの方法は次のとおりです。

    PRAGMA table_info() ステートメント

    PRAGMA table_info() ステートメントは、列やデータ型など、指定されたテーブルに関する情報を返します。

    Albumというテーブルに関する情報を返す例を次に示します。 。

    PRAGMA table_info(Album);

    結果:

    cid  name      type           notnull  dflt_value  pk
    ---  --------  -------------  -------  ----------  --
    0    AlbumId   INTEGER        1                    1 
    1    Title     NVARCHAR(160)  1                    0 
    2    ArtistId  INTEGER        1                    0 

    この場合、列は明示的に定義されたデータ型で作成されました。

    別の例を次に示します。

    PRAGMA table_info(Events);

    結果:

    cid  name       type     notnull  dflt_value  pk
    ---  ---------  -------  -------  ----------  --
    0    EventId    INTEGER  0                    1 
    1    EventName           0                    0 
    2    StartDate           0                    0 
    3    EndDate             0                    0 

    この場合、最初の列のみにデータ型が明示的に定義されています。

    SQLiteは、他の主要なRDBMSとは異なるデータ型のアプローチを使用します。 SQLiteは動的型付けシステムを使用しているため、値のデータ型はコンテナーではなく値自体に関連付けられます。

    とはいえ、SQLiteでは列のデータ型を明示的に指定できます。上記の例では、データ型が明示的に定義された列がいくつか作成されており、上記のPRAGMAを実行すると、それらのデータ型が何であるかを確認できます。 ステートメント。

    PRAGMA table_xinfo() ステートメント

    PRAGMA table_xinfo() ステートメントは、PRAGMA table_info()とまったく同じです。 ステートメント。ただし、仮想テーブルの非表示の列も返します。

    PRAGMA table_xinfo(Album);

    結果:

    cid  name      type           notnull  dflt_value  pk  hidden
    ---  --------  -------------  -------  ----------  --  ------
    0    AlbumId   INTEGER        1                    1   0     
    1    Title     NVARCHAR(160)  1                    0   0     
    2    ArtistId  INTEGER        1                    0   0     

    基本的にtable_info()と同じであることがわかります 、余分な列を除いて。

    .schema コマンド

    テーブルの構造を取得する別の方法は、.schemaを使用することです。 指図。これは、テーブルの作成に使用されたSQLを返すために使用できるいくつかのメソッドの1つです。

    例:

    .schema Album

    結果:

    CREATE TABLE Chinook.[Album]
    (
        [AlbumId] INTEGER  NOT NULL,
        [Title] NVARCHAR(160)  NOT NULL,
        [ArtistId] INTEGER  NOT NULL,
        CONSTRAINT [PK_Album] PRIMARY KEY  ([AlbumId]),
        FOREIGN KEY ([ArtistId]) REFERENCES [Artist] ([ArtistId]) 
    		ON DELETE NO ACTION ON UPDATE NO ACTION
    );
    CREATE INDEX Chinook.[IFK_AlbumArtistId] ON [Album] ([ArtistId]);

    このメソッドを使用すると、データ型の指定を含め、テーブルの再作成に必要なSQLを生成できます。

    sqlite_schema

    sqlite_schemaを使用できます 前の例と同じものにテーブルを作成します。

    同じテーブルを使用した例を次に示します。

    SELECT sql 
    FROM Chinook.sqlite_schema 
    WHERE tbl_name = 'Album';

    結果:

    CREATE TABLE [Album]
    (
        [AlbumId] INTEGER  NOT NULL,
        [Title] NVARCHAR(160)  NOT NULL,
        [ArtistId] INTEGER  NOT NULL,
        CONSTRAINT [PK_Album] PRIMARY KEY  ([AlbumId]),
        FOREIGN KEY ([ArtistId]) REFERENCES [Artist] ([ArtistId]) 
    		ON DELETE NO ACTION ON UPDATE NO ACTION
    )
    CREATE INDEX [IFK_AlbumArtistId] ON [Album] ([ArtistId]) 

    sqlite_schema sqlite_masterを使用してテーブルにアクセスすることもできます 。

    typeof() 機能

    typeof()を使用できます クエリによって返される列のデータ型を取得する関数。具体的には、指定された式のデータ型を返します。

    例:

    SELECT typeof(Title) FROM Album
    LIMIT 1;

    結果:

    text

    ここではLIMITを使用しました 結果を1行だけに制限する句。そうしないと、テーブルの各行で同じ結果が繰り返されます。

    このメソッドは、列に割り当てられた実際のデータ型ではなく、クエリによって返される式のデータ型を返すことに注意してください。返される可能性のあるタイプは次のとおりです。

    • null
    • integer
    • real
    • text
    • blob

    SQLiteデータベースの各列には、上記のタイプのアフィニティのいずれかが割り当てられます。

    これらは実際にはストレージクラスと呼ばれます。ストレージクラスは、データ型よりも一般的です。 SQLステートメントのテキストに埋め込まれたリテラルであろうと、プリコンパイルされたSQLステートメントにバインドされたパラメーターであろうと、SQLステートメントのすべての値には、暗黙のストレージクラスがあります。データベースエンジンは、数値ストレージクラス間で値を変換する場合があります(INTEGER およびREAL )およびTEXT クエリ実行中。

    SQLiteのデータ型に関する詳細情報

    SQLiteのデータ型の詳細については、SQLiteデータ型(SQLiteドキュメント)および柔軟な入力の利点(SQLiteドキュメント)を参照してください。

    STRICTも参照してください テーブル(SQLiteドキュメント)、2021-11-27のSQLiteバージョン3.37.0で追加された機能で、柔軟な型指定システムを拒否し、代わりに他のすべてのSQLデータベースエンジンやSQL標準。


    1. MariaDBの時間値からマイクロ秒を抽出する4つの関数

    2. AndroidSQLiteの挿入または更新

    3. MicrosoftPowerBI内でデータを読み込んで管理する方法

    4. psycopg2 /PythonDB-APIおよびPostgreSQLを使用したパラメーター化されたクエリ