如何判断数据表中某列值是否以另一列的某个值开头?
判断数据表中某列是否以另一列的值开头
问题说明
需要判断数据表中t1列的值是否以同一行t2列的值开头,数据表示例如下:
| t1 | t2 |
|---|---|
| 3253 | 123 |
| 1234 | 000 |
| 9876 | 932 |
预期结果:仅t1=1234且t2=123的行返回True,其余行返回False。
已尝试的语句
t1 LIKE (t2 || '%')starts_with(t1,t2)starts_with(t1, (select t2))
可行解决方案
不同数据库的语法细节略有差异,核心是确保数值类型转成字符串后再进行匹配:
通用LIKE方案(适配多数数据库)
LIKE语法的思路是对的,但如果t1和t2是数值类型,必须先转换为字符串再拼接通配符:
- MySQL/MariaDB:
CAST(t1 AS CHAR) LIKE CONCAT(CAST(t2 AS CHAR), '%') - PostgreSQL:
t1::TEXT LIKE t2::TEXT || '%' - SQL Server:
CAST(t1 AS VARCHAR) LIKE CAST(t2 AS VARCHAR) + '%'
专用STARTS_WITH函数方案
如果你的数据库支持STARTS_WITH函数(如PostgreSQL 12+、BigQuery等),直接转成字符串后调用函数即可:
STARTS_WITH(CAST(t1 AS TEXT), CAST(t2 AS TEXT))
之前的尝试失败,大概率是因为t1和t2是数值类型,函数无法直接处理数值,转换为字符串后就能正常执行。
额外注意
如果t2存在空值,建议添加AND t2 IS NOT NULL过滤,避免出现非预期的匹配结果。
内容的提问来源于stack exchange,提问作者Baptiste
相关产品推荐
相关产品推荐

