如何用Char(50)列前9位与Char(9)列做等值比较?
字符类型列匹配解决方案
针对Char(9)类型的Column1与Char(50)类型的Column2前9位等值匹配的问题,核心在于处理Char类型固定长度带来的尾部补空格问题,以下是主流数据库的具体实现方案:
通用思路
Char类型存储时会自动用空格补全到定义的长度,因此直接截取或trim单一列可能无法匹配,需要同时对两列的空格进行处理后再比较。
SQL Server
使用LEFT截取Column2前9位,结合LTRIM(RTRIM())(兼容全版本)或TRIM()(2017及以上版本)去除两边空格:
SELECT * FROM your_table WHERE LTRIM(RTRIM(Column1)) = LTRIM(RTRIM(LEFT(Column2, 9)))
也可通过LIKE简化逻辑(需先处理空格):
SELECT * FROM your_table WHERE TRIM(Column2) LIKE TRIM(Column1) + '%'
MySQL
用LEFT截取前9位,TRIM()统一处理两列空格:
SELECT * FROM your_table WHERE TRIM(Column1) = TRIM(LEFT(Column2, 9))
Oracle
通过SUBSTR截取Column2前9位,再用TRIM()消除空格:
SELECT * FROM your_table WHERE TRIM(Column1) = TRIM(SUBSTR(Column2, 1, 9))
额外注意
如果确认Column1存储的内容无前置空格,仅需处理尾部空格,可改用RTRIM()替代TRIM(),提升查询效率。
内容的提问来源于stack exchange,提问作者GSCT
相关产品推荐
相关产品推荐

