Skip to content

非公式本サイトは非公式の日本語ドキュメントであり、Cloudflare 公式サイトではありません。最新情報はdevelopers.cloudflare.comをご確認ください。

スカラー関数

最終更新 Markdown で表示Agent セットアップ

スカラー関数は個々の値を変換します。SELECTWHEREGROUP BYHAVINGORDER BY 句で使えます。


コア関数

arrow_cast

式を、文字列名で指定した Arrow データ型へキャストします。

SELECT arrow_cast(total_amount, 'Float32') AS amount_f32
FROM my_namespace.sales_data
WHERE total_amount IS NOT NULL
LIMIT 1

arrow_typeof

式の Arrow データ型名を返します。

SELECT arrow_typeof(total_amount) AS amount_type,
       arrow_typeof(customer_id) AS id_type
FROM my_namespace.sales_data
LIMIT 1

coalesce

NULL でない最初の引数を返します。

SELECT coalesce(department, region, 'unknown') AS first_val
FROM my_namespace.sales_data
LIMIT 5

get_field

struct から名前でフィールドを取り出します。

SELECT get_field(named_struct('customer', customer_id, 'amount', total_amount), 'amount') AS amt
FROM my_namespace.sales_data
WHERE total_amount IS NOT NULL
LIMIT 1

greatest

引数リストのうち最大の値を返します。

SELECT greatest(total_amount, unit_price, quantity) AS max_val
FROM my_namespace.sales_data
WHERE total_amount IS NOT NULL
LIMIT 5

least

引数リストのうち最小の値を返します。

SELECT least(total_amount, unit_price, quantity) AS min_val
FROM my_namespace.sales_data
WHERE total_amount IS NOT NULL
LIMIT 5

named_struct

キーと値のペアから、名前付きフィールドを持つ struct を作成します。

SELECT named_struct('customer', customer_id, 'amount', total_amount) AS info
FROM my_namespace.sales_data
WHERE total_amount IS NOT NULL
LIMIT 1

nullif

両方の引数が等しければ NULL を返し、それ以外は最初の引数を返します。

SELECT nullif(department, 'Unknown') AS dept
FROM my_namespace.sales_data
LIMIT 5

nvl

最初の引数が NULL なら 2 つ目の引数を返します。エイリアス: ifnull

SELECT nvl(department, 'N/A') AS dept
FROM my_namespace.sales_data
LIMIT 5

nvl2

最初の引数が NULL でなければ 2 つ目の引数を返し、NULL なら 3 つ目を返します。

SELECT nvl2(department, 'has_dept', 'no_dept') AS dept_status
FROM my_namespace.sales_data
LIMIT 5

overlay

指定した位置の部分文字列を置き換えます。

SELECT customer_id,
       overlay(customer_id PLACING 'XX' FROM 1 FOR 2) AS masked
FROM my_namespace.sales_data
LIMIT 3

struct

位置付きフィールドを持つ struct を作成します。エイリアス: row

SELECT struct(customer_id, total_amount, region) AS info
FROM my_namespace.sales_data
WHERE total_amount IS NOT NULL
LIMIT 1

暗号関数

digest

指定したアルゴリズムで文字列のハッシュを返します。対応アルゴリズム: md5sha224sha256sha384sha512

SELECT customer_id, digest(customer_id, 'sha256') AS hash
FROM my_namespace.sales_data
LIMIT 1

md5

文字列の MD5 ハッシュを返します。

SELECT customer_id, md5(customer_id) AS hash
FROM my_namespace.sales_data
LIMIT 1

sha224

文字列の SHA-224 ハッシュを返します。

SELECT sha224(customer_id) AS hash
FROM my_namespace.sales_data
LIMIT 1

sha256

文字列の SHA-256 ハッシュを返します。

SELECT customer_id, sha256(customer_id) AS hash
FROM my_namespace.sales_data
LIMIT 1

sha384

文字列の SHA-384 ハッシュを返します。

SELECT sha384(customer_id) AS hash
FROM my_namespace.sales_data
LIMIT 1

sha512

文字列の SHA-512 ハッシュを返します。

SELECT sha512(customer_id) AS hash
FROM my_namespace.sales_data
LIMIT 1

日時関数

current_date

今日の日付を返します。エイリアス: today

SELECT current_date() AS today_date
FROM my_namespace.sales_data
LIMIT 1

current_time

現在時刻を返します。精度は 10ms 境界に量子化されます。

SELECT current_time() AS now_time
FROM my_namespace.sales_data
LIMIT 1

date_bin

タイムスタンプを、起点に揃えた固定サイズの間隔へビン分けします。

SELECT date_bin(INTERVAL '1 hour', timestamp, '2025-01-01T00:00:00Z') AS hour_bin,
       COUNT(*) AS cnt
FROM my_namespace.sales_data
GROUP BY date_bin(INTERVAL '1 hour', timestamp, '2025-01-01T00:00:00Z')
ORDER BY hour_bin
LIMIT 5

date_part

タイムスタンプから構成要素を取り出します。エイリアス: datepart

対応フィールド: yearmonthdayhourminutesecondmillisecondmicrosecondweekdowdoyquarterepoch

SELECT date_part('hour', timestamp) AS hr,
       date_part('minute', timestamp) AS mn
FROM my_namespace.sales_data
LIMIT 1

date_trunc

タイムスタンプを指定した単位へ切り捨てます。エイリアス: datetrunc

対応単位: yearmonthweekdayhourminutesecond

SELECT date_trunc('day', timestamp) AS day_trunc, COUNT(*) AS cnt
FROM my_namespace.sales_data
GROUP BY date_trunc('day', timestamp)
ORDER BY day_trunc
LIMIT 5

from_unixtime

Unix エポック(秒)をタイムスタンプへ変換します。

SELECT from_unixtime(1770000000) AS ts
FROM my_namespace.sales_data
LIMIT 1

make_date

年、月、日から日付を組み立てます。

SELECT make_date(2026, 3, 1) AS d
FROM my_namespace.sales_data
LIMIT 1

make_time

時、分、秒から時刻を組み立てます。

SELECT make_time(14, 30, 0) AS t
FROM my_namespace.sales_data
LIMIT 1

now

現在のタイムスタンプを返します。エイリアス: current_timestamp

精度は 10ms 境界に量子化されます。

SELECT now() AS current_ts
FROM my_namespace.sales_data
LIMIT 1

to_char

strftime 形式でタイムスタンプを文字列に整形します。エイリアス: date_format

SELECT to_char(timestamp, '%Y-%m-%d %H:%M') AS formatted
FROM my_namespace.sales_data
LIMIT 1

to_date

書式パターンを使って、文字列から日付を解析します。

SELECT to_date('2026-03-01', '%Y-%m-%d') AS d
FROM my_namespace.sales_data
LIMIT 1

to_local_time

タイムスタンプからタイムゾーン情報を取り除きます。

SELECT to_local_time(timestamp) AS local_ts
FROM my_namespace.sales_data
LIMIT 1

to_time

書式パターンを使って、文字列から時刻を解析します。

SELECT to_time('14:30:00', '%H:%M:%S') AS t
FROM my_namespace.sales_data
LIMIT 1

to_timestamp

書式パターンを使って、文字列からタイムスタンプを解析します。

SELECT to_timestamp('2026-03-01 12:00:00', '%Y-%m-%d %H:%M:%S') AS ts
FROM my_namespace.sales_data
LIMIT 1

to_timestamp_micros

Unix エポックからのマイクロ秒をタイムスタンプへ変換します。

SELECT to_timestamp_micros(1770000000000000) AS ts
FROM my_namespace.sales_data
LIMIT 1

to_timestamp_millis

Unix エポックからのミリ秒をタイムスタンプへ変換します。

SELECT to_timestamp_millis(1770000000000) AS ts
FROM my_namespace.sales_data
LIMIT 1

to_timestamp_nanos

Unix エポックからのナノ秒をタイムスタンプへ変換します。大きい値はオーバーフローすることがあります。

SELECT to_timestamp_nanos(1770000000000000000) AS ts
FROM my_namespace.sales_data
LIMIT 1

to_timestamp_seconds

Unix エポックからの秒をタイムスタンプへ変換します。

SELECT to_timestamp_seconds(1770000000) AS ts
FROM my_namespace.sales_data
LIMIT 1

to_unixtime

タイムスタンプを Unix エポック(秒)へ変換します。

SELECT to_unixtime(timestamp) AS epoch
FROM my_namespace.sales_data
LIMIT 1

エンコード関数

decode

文字列をバイナリデータへデコードします。対応エンコード: base64

SELECT decode('aGVsbG8=', 'base64') AS raw
FROM my_namespace.sales_data
LIMIT 1

encode

バイナリデータを文字列へエンコードします。対応エンコード: base64

SELECT encode(CAST('hello' AS BYTEA), 'base64') AS b64
FROM my_namespace.sales_data
LIMIT 1

JSON 関数

json_as_text

任意の JSON 値を、引用符なしのテキストとして返します。

SELECT json_as_text(doc, 'description') AS description
FROM my_namespace.sales_data
LIMIT 5

json_contains

指定したキーパスが JSON に存在すれば true を返します。

SELECT customer_id, json_contains(doc, 'email') AS has_email
FROM my_namespace.sales_data
LIMIT 5

json_get

キーパスで値を取り出します。ユニオン型を返します。結果を予測しやすくするには、型付きのバリアント(json_get_strjson_get_int など)を使ってください。

SELECT json_get(doc, 'name') AS name
FROM my_namespace.sales_data
LIMIT 5

json_get_array

JSON 配列を文字列のリストとして返します。

SELECT json_get_array(doc, 'tags') AS tags
FROM my_namespace.sales_data
LIMIT 5

json_get_bool

キーパスで、JSON 列から真偽値を返します。

SELECT json_get_bool(doc, 'active') AS is_active
FROM my_namespace.sales_data
LIMIT 5

json_get_float

キーパスで、JSON 列から浮動小数点値を返します。

SELECT json_get_float(doc, 'price') AS price
FROM my_namespace.sales_data
LIMIT 5

json_get_int

キーパスで、JSON 列から整数値を返します。

SELECT json_get_int(doc, 'age') AS age
FROM my_namespace.sales_data
LIMIT 5

json_get_json

入れ子の JSON を、生の JSON 文字列として返します。

SELECT json_get_json(doc, 'metadata') AS metadata
FROM my_namespace.sales_data
LIMIT 5

json_get_str

キーパスで、JSON 列から文字列値を返します。

SELECT json_get_str(doc, 'name') AS name
FROM my_namespace.sales_data
LIMIT 5

json_length

JSON 配列またはオブジェクトの長さを返します。

SELECT json_length(doc, 'items') AS item_count
FROM my_namespace.sales_data
LIMIT 5

数学関数

abs

数値の絶対値を返します。

SELECT abs(total_amount - 500) AS distance_from_500
FROM my_namespace.sales_data
WHERE total_amount IS NOT NULL
LIMIT 5

cbrt

数値の立方根を返します。

SELECT cbrt(CAST(quantity AS DOUBLE)) AS cbrt_qty
FROM my_namespace.sales_data
WHERE quantity IS NOT NULL
LIMIT 5

ceil

数値以上の最小の整数を返します。

SELECT ceil(total_amount) AS rounded_up
FROM my_namespace.sales_data
WHERE total_amount IS NOT NULL
LIMIT 5

degrees

ラジアンを度に変換します。

SELECT degrees(pi()) AS full_circle
FROM my_namespace.sales_data
LIMIT 1

exp

e を指定した乗数で累乗した値を返します。

SELECT exp(total_amount / 1000.0) AS exp_val
FROM my_namespace.sales_data
WHERE total_amount IS NOT NULL
LIMIT 5

factorial

負でない整数の階乗を返します。

SELECT factorial(5) AS fact5
FROM my_namespace.sales_data
LIMIT 1

floor

数値以下の最大の整数を返します。

SELECT floor(total_amount) AS rounded_down
FROM my_namespace.sales_data
WHERE total_amount IS NOT NULL
LIMIT 5

gcd

2 つの整数の最大公約数を返します。

SELECT gcd(12, 8) AS gcd_val
FROM my_namespace.sales_data
LIMIT 1

双曲線関数

sinhcoshtanhasinhacoshatanh

SELECT sinh(1.0) AS sh, cosh(1.0) AS ch, tanh(1.0) AS th
FROM my_namespace.sales_data
LIMIT 1

isnan

値が NaN なら true を返します。

SELECT isnan(0.0 / 0.0) AS is_nan
FROM my_namespace.sales_data
LIMIT 1

iszero

値が 0 なら true を返します。

SELECT iszero(0.0) AS is_zero
FROM my_namespace.sales_data
LIMIT 1

lcm

2 つの整数の最小公倍数を返します。

SELECT lcm(4, 6) AS lcm_val
FROM my_namespace.sales_data
LIMIT 1

ln

自然対数を返します。

SELECT ln(total_amount) AS ln_val
FROM my_namespace.sales_data
WHERE total_amount > 0
LIMIT 5

log

指定した底での値の対数を返します。

SELECT log(10.0, total_amount) AS log10_val
FROM my_namespace.sales_data
WHERE total_amount > 0
LIMIT 5

log2

底 2 の対数を返します。

SELECT log2(total_amount) AS log2_val
FROM my_namespace.sales_data
WHERE total_amount > 0
LIMIT 5

log10

常用対数(底 10)を返します。

SELECT log10(total_amount) AS log10_val
FROM my_namespace.sales_data
WHERE total_amount > 0
LIMIT 5

nanvl

最初の引数が NaN でなければその値を返し、それ以外は 2 つ目を返します。

SELECT nanvl(0.0 / 0.0, -1.0) AS safe_val
FROM my_namespace.sales_data
LIMIT 1

pi

円周率の値を返します。

SELECT pi() AS pi_val
FROM my_namespace.sales_data
LIMIT 1

power

数値を累乗します。エイリアス: pow

SELECT power(total_amount, 2.0) AS amount_squared
FROM my_namespace.sales_data
WHERE total_amount IS NOT NULL
LIMIT 5

radians

度をラジアンに変換します。

SELECT radians(180.0) AS pi_val
FROM my_namespace.sales_data
LIMIT 1

random

0 以上 1 未満のランダムな浮動小数点数を返します。

SELECT random() AS rnd
FROM my_namespace.sales_data
LIMIT 1

round

数値を指定した小数桁数に丸めます。

SELECT round(total_amount, 2) AS rounded
FROM my_namespace.sales_data
WHERE total_amount IS NOT NULL
LIMIT 5

signum

数値の符号を返します。-1、0、または 1 です。

SELECT signum(total_amount - 500) AS sign_val
FROM my_namespace.sales_data
WHERE total_amount IS NOT NULL
LIMIT 5

sqrt

数値の平方根を返します。

SELECT sqrt(CAST(quantity AS DOUBLE)) AS sqrt_qty
FROM my_namespace.sales_data
WHERE quantity IS NOT NULL
LIMIT 5

三角関数

sincostanasinacosatanatan2cot

SELECT sin(1.0) AS s, cos(1.0) AS c, tan(1.0) AS t,
       asin(0.5) AS as_val, acos(0.5) AS ac_val, atan(1.0) AS at_val
FROM my_namespace.sales_data
LIMIT 1

trunc

数値を指定した小数桁数で切り捨てます。

SELECT trunc(total_amount, 0) AS truncated
FROM my_namespace.sales_data
WHERE total_amount IS NOT NULL
LIMIT 5

正規表現関数

regexp_count

文字列内でパターンに一致した回数を返します。

SELECT department, regexp_count(department, '[aeiou]') AS vowels
FROM my_namespace.sales_data
WHERE department IS NOT NULL
LIMIT 5

regexp_instr

パターンの最初の一致位置を返します。

SELECT department, regexp_instr(department, '[0-9]') AS digit_pos
FROM my_namespace.sales_data
WHERE department IS NOT NULL
LIMIT 5

regexp_like

文字列が正規表現パターンに一致すれば true を返します。

SELECT department, regexp_like(department, '^[A-Z]{2}') AS starts_two_caps
FROM my_namespace.sales_data
WHERE department IS NOT NULL
LIMIT 5

regexp_match

パターンの最初の一致を配列として返します。

SELECT department, regexp_match(department, '([A-Z][a-z]+)') AS first_word
FROM my_namespace.sales_data
WHERE department IS NOT NULL
LIMIT 3

regexp_replace

パターンの一致を置換文字列で置き換えます。

SELECT department, regexp_replace(department, '[0-9]', '#') AS no_digits
FROM my_namespace.sales_data
WHERE department IS NOT NULL
LIMIT 5

文字列関数

ascii

最初の文字の ASCII コードを返します。

SELECT customer_id, ascii(customer_id) AS first_code
FROM my_namespace.sales_data
LIMIT 3

bit_length

文字列のビット長を返します。

SELECT customer_id, bit_length(customer_id) AS bits
FROM my_namespace.sales_data
LIMIT 3

btrim

文字列の両側から文字を取り除きます。エイリアス: trim

SELECT btrim('  hello  ') AS trimmed
FROM my_namespace.sales_data
LIMIT 1

chr

指定した ASCII コードに対応する文字を返します。

SELECT chr(65) AS letter
FROM my_namespace.sales_data
LIMIT 1

concat

2 つ以上の文字列を連結します。

SELECT concat(department, ' - ', region) AS label
FROM my_namespace.sales_data
WHERE department IS NOT NULL
LIMIT 5

concat_ws

区切り文字を挟んで文字列を連結します。

SELECT concat_ws('/', region, department) AS path
FROM my_namespace.sales_data
WHERE department IS NOT NULL
LIMIT 5

contains

文字列が部分文字列を含めば true を返します。

SELECT customer_id, contains(department, 'Sales') AS is_sales
FROM my_namespace.sales_data
WHERE department IS NOT NULL
LIMIT 5

ends_with

文字列が指定した接尾辞で終われば true を返します。

SELECT customer_id, ends_with(department, 'ing') AS ends_ing
FROM my_namespace.sales_data
WHERE department IS NOT NULL
LIMIT 5

levenshtein

2 つの文字列間のレーベンシュタイン編集距離を返します。

SELECT department, levenshtein(department, 'Engineering') AS dist
FROM my_namespace.sales_data
WHERE department IS NOT NULL
LIMIT 5

lower

文字列を小文字に変換します。

SELECT lower(department) AS dept_lower
FROM my_namespace.sales_data
LIMIT 5

ltrim

文字列の左側から文字を取り除きます。

SELECT ltrim('  hello') AS trimmed
FROM my_namespace.sales_data
LIMIT 1

octet_length

文字列のバイト長を返します。

SELECT customer_id, octet_length(customer_id) AS bytes
FROM my_namespace.sales_data
LIMIT 3

repeat

文字列を指定回数繰り返します。

SELECT repeat(region, 2) AS doubled
FROM my_namespace.sales_data
LIMIT 3

replace

部分文字列のすべての出現を置き換えます。

SELECT department, replace(department, ' ', '_') AS underscored
FROM my_namespace.sales_data
WHERE department IS NOT NULL
LIMIT 5

rtrim

文字列の右側から文字を取り除きます。

SELECT rtrim('hello  ') AS trimmed
FROM my_namespace.sales_data
LIMIT 1

split_part

区切り文字で文字列を分割し、指定した部分(1 始まり)を返します。

SELECT customer_id, split_part(customer_id, '-', 1) AS first_part
FROM my_namespace.sales_data
WHERE customer_id IS NOT NULL
LIMIT 5

starts_with

文字列が指定した接頭辞で始まれば true を返します。

SELECT customer_id, starts_with(department, 'Eng') AS is_eng
FROM my_namespace.sales_data
WHERE department IS NOT NULL
LIMIT 5

to_hex

整数を 16 進文字列に変換します。

SELECT to_hex(255) AS hex_ff
FROM my_namespace.sales_data
LIMIT 1

upper

文字列を大文字に変換します。

SELECT upper(region) AS region_upper
FROM my_namespace.sales_data
LIMIT 5

uuid

ランダムな UUID を生成します。

SELECT uuid() AS new_id
FROM my_namespace.sales_data
LIMIT 1

Unicode 関数

character_length

文字列の文字数を返します。エイリアス: lengthchar_length

SELECT department, character_length(department) AS len
FROM my_namespace.sales_data
WHERE department IS NOT NULL
LIMIT 5

find_in_set

カンマ区切りリスト内での文字列の位置を返します。

SELECT find_in_set('North', 'South,North,East,West') AS pos
FROM my_namespace.sales_data
LIMIT 1

initcap

各単語の先頭文字を大文字にします。

SELECT initcap('hello world') AS capped
FROM my_namespace.sales_data
LIMIT 1

left

文字列の左端から n 文字を返します。

SELECT department, left(department, 5) AS prefix
FROM my_namespace.sales_data
WHERE department IS NOT NULL
LIMIT 5

lpad

文字列を指定した長さになるよう左側に埋めます。

SELECT region, lpad(region, 15, '.') AS padded
FROM my_namespace.sales_data
LIMIT 5

reverse

文字列を逆順にします。

SELECT department, reverse(department) AS rev
FROM my_namespace.sales_data
WHERE department IS NOT NULL
LIMIT 5

文字列の右端から n 文字を返します。

SELECT department, right(department, 3) AS suffix
FROM my_namespace.sales_data
WHERE department IS NOT NULL
LIMIT 5

rpad

文字列を指定した長さになるよう右側に埋めます。

SELECT region, rpad(region, 15, '.') AS padded
FROM my_namespace.sales_data
LIMIT 5

strpos

部分文字列の位置(1 始まり)を返します。エイリアス: instrposition

SELECT department, strpos(department, 'a') AS a_pos
FROM my_namespace.sales_data
WHERE department IS NOT NULL
LIMIT 5

substr

指定した位置から指定した長さの部分文字列を返します。エイリアス: substring

SELECT department, substr(department, 1, 8) AS first_eight
FROM my_namespace.sales_data
WHERE department IS NOT NULL
LIMIT 5

substr_index

区切り文字の n 回目の出現より前の部分文字列を返します。エイリアス: substring_index

SELECT customer_id, substr_index(customer_id, '-', 1) AS first_segment
FROM my_namespace.sales_data
WHERE customer_id IS NOT NULL
LIMIT 5

translate

対応表にもとづいて、文字列内の文字を置き換えます。

SELECT department, translate(department, 'aeiou', '12345') AS coded
FROM my_namespace.sales_data
WHERE department IS NOT NULL
LIMIT 5

役に立ちましたか?