在所有主流数据仓库方言(Snowflake、BigQuery、Databricks、PostgreSQL 等)中编写正确、高效的 SQL。用于编写查询、优化慢查询、在方言间转换,或构建含 CTE、窗口函数和聚合的复杂分析查询时触发。触发词:SQL查询、写SQL
在所有主流数据仓库方言中,编写正确、高效、可读的 SQL。
日期/时间:
-- 当前日期/时间
CURRENT_DATE, CURRENT_TIMESTAMP, NOW()
-- 日期运算
date_column + INTERVAL '7 days'
date_column - INTERVAL '1 month'
-- 截断到周期
DATE_TRUNC('month', created_at)
-- 提取部分
EXTRACT(YEAR FROM created_at)
EXTRACT(DOW FROM created_at) -- 0=周日
-- 格式化
TO_CHAR(created_at, 'YYYY-MM-DD')
字符串函数:
-- 拼接
first_name || ' ' || last_name
CONCAT(first_name, ' ', last_name)
-- 模式匹配
column ILIKE '%pattern%' -- 不区分大小写
column ~ '^regex_pattern$' -- 正则
-- 字符串操作
LEFT(str, n), RIGHT(str, n)
SPLIT_PART(str, delimiter, position)
REGEXP_REPLACE(str, pattern, replacement)
数组与 JSON:
-- JSON 访问
data->>'key' -- 文本
data->'nested'->'key' -- json
data#>>'{path,to,key}' -- 嵌套文本
-- 数组操作
ARRAY_AGG(column)
ANY(array_column)
array_column @> ARRAY['value']
性能技巧:
EXPLAIN ANALYZE 分析查询EXISTS 而非 IN日期/时间:
-- 当前日期/时间
CURRENT_DATE(), CURRENT_TIMESTAMP(), SYSDATE()
-- 日期运算
DATEADD(day, 7, date_column)
DATEDIFF(day, start_date, end_date)
-- 截断到周期
DATE_TRUNC('month', created_at)
-- 提取部分
YEAR(created_at), MONTH(created_at), DAY(created_at)
DAYOFWEEK(created_at)
-- 格式化
TO_CHAR(created_at, 'YYYY-MM-DD')
字符串函数:
-- 默认不区分大小写(取决于排序规则)
column ILIKE '%pattern%'
REGEXP_LIKE(column, 'pattern')
-- 解析 JSON