すべてのプロダクト
Search
ドキュメントセンター

Tablestore:日付時刻データのクエリ

最終更新日:Dec 28, 2024

このトピックでは、SQL ステートメントのレスポンスで日付時刻データ、日付データ、および時刻データをクエリする方法について説明します。

前提条件

  • TableStoreClient が初期化されていること。詳細は、初期化トピックの「TableStoreClient の初期化」セクションを参照してください。

  • マッピングテーブルが作成されていること。詳細は、マッピングテーブルの作成を参照してください。

API 操作

次の表に、異なる種類の日付時刻データをクエリするために呼び出すことができる API 操作を示します。クエリする日付時刻データの種類に基づいて操作を選択します。

重要

getDateTime 操作によって返されるデータのデフォルトのタイムゾーンは UTC です。ビジネス要件に基づいてタイムゾーンを変換してください。

時刻の種類

操作

パラメーター

戻り値の型

日付時刻

getDateTime

columnIndex (INT 型)

time.Time

日付時刻

getDateTime

columnName (STRING 型)

time.Time

時刻

getTime

columnIndex (INT 型)

time.Duration

時刻

getTime

columnName (STRING 型)

time.Duration

日付

getDate

columnIndex (INT 型)

time.Time

日付

getDate

columnName (STRING 型)

time.Time

パラメーター

パラメーター

説明

query

SQL ステートメント。必要な機能に基づいてパラメーターを設定します。

select from_unixtime(time_col) as datetime_value, time(from_unixtime(time_col)) as time_value, or date(from_unixtime(time_col)) as date_value from test_table limit 1 ステートメントを実行して、test_table テーブルの time_col 列のデータをクエリし、データを日付時刻データ、時刻データ、および日付データに変換できます。最大で 1 行のデータが返されます。システムは、SQL ステートメントの要求タイプ、レスポンススキーマ、およびレスポンス結果を返します。

func queryData(client *tablestore.TableStoreClient) {
    // SQL リクエストを作成します。
    request := &tablestore.SQLQueryRequest{Query: "select from_unixtime(time_col) as datetime_value,time(from_unixtime(time_col)) as time_value, date(from_unixtime(time_col)) as date_value from test_table limit 1"}

    // SQL リクエストに対するレスポンスを取得します。
    response, err := client.SQLQuery(request)
    if err != nil {
        panic(err)
    }

    // SQL ステートメントのレスポンス結果を取得します。
    resultSet := response.ResultSet
    fmt.Println("response resultset:")
    for resultSet.HasNext() {
        row := resultSet.Next()
        for i := 0; i < len(columns); i++ {
            name := columns[i].Name
            isnull, err := row.IsNull(i)
            if err != nil {
                println("[INFO:] get column error, name: ", name, ", error: ", err.Error()) // [INFO:] 列の取得エラー、名前: , エラー: 
                continue
            }
            if isnull {
                println("[INFO]: column is SQL NULL, name: ", name) // [INFO]: 列は SQL NULL です、名前: 
                continue
            }
            switch columns[i].Type {
                case tablestore.ColumnType_DATETIME:
                time, err := row.GetDateTime(i)
                if err != nil {
                    println("[INFO:] get column error, name: ", name, ", error: ", err.Error()) // [INFO:] 列の取得エラー、名前: , エラー: 
                }
                println(time.Local().String())
                time, err = row.GetDateTimeByName("datetime_value")
                if err != nil {
                    println("[INFO:] get column error, name: ", name, ", error: ", err.Error()) // [INFO:] 列の取得エラー、名前: , エラー: 
                }
                println(time.String())
                case tablestore.ColumnType_TIME:
                duration, err := row.GetTime(i)
                if err != nil {
                    println("[INFO:] get column error, name: ", name, ", error: ", err.Error()) // [INFO:] 列の取得エラー、名前: , エラー: 
                }
                println(duration.String())
                duration, err = row.GetTimeByName("time_value")
                if err != nil {
                    println("[INFO:] get column error, name: ", name, ", error: ", err.Error()) // [INFO:] 列の取得エラー、名前: , エラー: 
                }
                println(duration.String())
                case tablestore.ColumnType_DATE:
                date, err := row.GetDate(i)
                if err != nil {
                    println("[INFO:] get column error, name: ", name, ", error: ", err.Error()) // [INFO:] 列の取得エラー、名前: , エラー: 
                }
                println(date.String())
                date, err = row.GetDateByName("date_value")
                if err != nil {
                    println("[INFO:] get column error, name: ", name, ", error: ", err.Error()) // [INFO:] 列の取得エラー、名前: , エラー: 
                }
                println(date.String())
            }
        }
    }
}

レスポンス例:

response resultset:
2023-11-09 10:14:00.01 +0800 CST
2023-11-09 10:14:00.01 +0800 CST
10h14m0.01s
10h14m0.01s
2023-11-09 00:00:00 +0000 UTC
2023-11-09 00:00:00 +0000 UTC