このトピックでは、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