bigquery-sql
BigQuery-specific SQL patterns: UNNEST for array expansion, STRUCT, ARRAY_AGG,…
SQLite-specific SQL patterns: substr/instr for string ops, || for concatenation, LIKE (no ILIKE), date()/strftime() for dates, CAST for type coercion, no FULL OUTER JOIN, GROUP_CONCAT, typeof(), COALESCE/IFNULL, printf() formatting.
$ npx -y skills add signalpilot-labs/signalpilot --skill sqlite-sql --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/sqlite-sqlContext preview
The summary Claude sees to decide when to auto-load this skill.
SQLite-specific SQL patterns: substr/instr for string ops, || for concatenation, LIKE (no ILIKE), date()/strftime() for dates, CAST for type coercion, no FULL OUTER JOIN, GROUP_CONCAT, typeof(), COALESCE/IFNULL, printf() formatting.
name: sqlite-sql description: "SQLite-specific SQL patterns: substr/instr for string ops, || for concatenation, LIKE (no ILIKE), date()/strftime() for dates, CAST for type coercion, no FULL OUTER JOIN, GROUP_CONCAT, typeof(), COALESCE/IFNULL, printf() formatting." type: skill
SQLite has no `POSITION()` or `SPLIT_PART()`. Use `substr()` and `instr()`:
-- Extract substring starting at position 3, length 5 SELECT substr(col, 3, 5) FROM t; -- Find position of substring (0 if not found) SELECT instr(col, 'needle') FROM t; -- Extract everything after a delimiter SELECT substr(col, instr(col, '/') + 1) FROM t WHERE instr(col, '/') > 0;
-- Concatenate two strings SELECT first_name || ' ' || last_name AS full_name FROM employees; -- With NULL handling (|| propagates NULL) SELECT COALESCE(first_name, '') || ' ' || COALESCE(last_name, '') AS full_name FROM employees;
SQLite's LIKE is case-insensitive for ASCII letters by default. There is no `ILIKE`:
-- Case-insensitive search (ASCII only by default)
WHERE name LIKE '%widget%'
-- For Unicode/non-ASCII, use UPPER/LOWER explicitly
WHERE UPPER(name) LIKE UPPER('%widget%')SQLite stores dates as text (ISO 8601), real, or integer. Use built-in date functions:
-- Current date / datetime
SELECT date('now');
SELECT datetime('now');
-- Add/subtract time
SELECT date('now', '+7 days');
SELECT date('now', '-1 month');
SELECT date(col, '+1 year') FROM t;
-- Truncate to month start
SELECT date(col, 'start of month') FROM t;
-- Extract parts
SELECT strftime('%Y', col) AS year FROM t;
SELECT strftime('%m', col) AS month FROM t;
SELECT strftime('%Y-%m', col) AS year_month FROM t;
-- Difference in days (days between two dates)
SELECT CAST(julianday(end_date) - julianday(start_date) AS INTEGER) AS days_diff
FROM t;SQLite does not support the `::` cast syntax. Use `CAST()`:
-- Cast to integer SELECT CAST(price AS INTEGER) FROM products; -- Cast to real SELECT CAST(score AS REAL) FROM results; -- Cast to text SELECT CAST(id AS TEXT) FROM records;
SQLite does not support FULL OUTER JOIN. Simulate it:
-- FULL OUTER JOIN equivalent SELECT a.id, a.val, b.val FROM table_a a LEFT JOIN table_b b ON a.id = b.id UNION SELECT b.id, a.val, b.val FROM table_b b LEFT JOIN table_a a ON b.id = a.id WHERE a.id IS NULL;
-- Comma-separated list of values per group
SELECT department, GROUP_CONCAT(name) AS members
FROM employees
GROUP BY department;
-- Custom separator
SELECT department, GROUP_CONCAT(name, ' | ') AS members
FROM employees
GROUP BY department;
-- With ordering (SQLite 3.44+, use subquery for older versions)
SELECT department,
GROUP_CONCAT(name ORDER BY name) AS sorted_members
FROM employees
GROUP BY department;-- Returns 'integer', 'real', 'text', 'blob', or 'null' SELECT typeof(col) FROM t; -- Filter by storage class SELECT * FROM t WHERE typeof(col) = 'integer';
-- COALESCE: first non-NULL value SELECT COALESCE(col1, col2, 'default') FROM t; -- IFNULL: SQLite shorthand for two-argument COALESCE SELECT IFNULL(col, 0) FROM t; -- NULLIF: return NULL if two values are equal SELECT NULLIF(col, 0) FROM t; -- returns NULL when col = 0
-- Zero-padded integer
SELECT printf('%05d', id) FROM t;
-- Fixed decimal places
SELECT printf('%.2f', price) FROM t;
-- String formatting
SELECT printf('%s-%s', category, subcategory) FROM t;Repo: signalpilot-labs/signalpilot
BigQuery-specific SQL patterns: UNNEST for array expansion, STRUCT, ARRAY_AGG,…
Load when dbt run or dbt parse fails. Covers YML duplicate patches, ref errors, passthrough…
Populate the knowledge base from dbt project research. Proposes entries across all 6…
Load when task involves dbt snapshots, SCD Type 2, or tracking data changes over time. Covers…
Load when task involves adding, writing, or fixing dbt unit tests. Covers unit_tests YAML…
Load when task involves dbt model versioning, creating v2 of a model, or backward-compatible…