如何编写SQL查询匹配指定年份到区间型注册年字段?
区间年份匹配的SQL查询方案
假设你的数据表名为user_registrations(实际使用时替换为你的真实表名),以下是针对不同数据库的查询方案,可直接用来匹配输入年份2018对应的区间记录:
MySQL/MariaDB 实现
通过SUBSTRING_INDEX拆分区间字符串,转换为整数后做区间判断:
SELECT id, registration_year FROM user_registrations WHERE CAST(SUBSTRING_INDEX(registration_year, '-', 1) AS UNSIGNED) <= 2018 AND CAST(SUBSTRING_INDEX(registration_year, '-', -1) AS UNSIGNED) >= 2018;
PostgreSQL 实现
使用SPLIT_PART函数分割区间字符串,转成整数后进行匹配:
SELECT id, registration_year FROM user_registrations WHERE CAST(SPLIT_PART(registration_year, '-', 1) AS INTEGER) <= 2018 AND CAST(SPLIT_PART(registration_year, '-', 2) AS INTEGER) >= 2018;
SQL Server 实现
通过LEFT/RIGHT结合CHARINDEX截取区间两端的年份,转换为整数后判断:
SELECT id, registration_year FROM user_registrations WHERE CAST(LEFT(registration_year, CHARINDEX('-', registration_year) - 1) AS INT) <= 2018 AND CAST(RIGHT(registration_year, LEN(registration_year) - CHARINDEX('-', registration_year)) AS INT) >= 2018;
补充说明
如果需要动态传入年份参数(而非固定写死2018),可以将代码中的2018替换为对应数据库的参数占位符:
- MySQL/MariaDB:用
? - PostgreSQL:用
$1 - SQL Server:用
@target_year
内容的提问来源于stack exchange,提问作者user22264561
相关产品推荐
相关产品推荐

