当前位置:首页 > 问答 > 正文

数据库里怎么截取最后两位字符,简单又实用的方法分享

说到从数据库的字段里截取最后两位字符,这确实是个挺常见的需求,你可能有一串员工编号,最后两位代表部门;或者一批订单号,最后两位是校验码;再或者身份证号,最后一位是校验位,你需要连同前面一位一起看看,不管是什么情况,方法其实都差不多,核心思路就一个:从右边开始数。

不同的数据库软件,用的具体“命令”不太一样,但都大同小异,你别被“数据库”这个词吓到,觉得好像很复杂,其实这些命令就像是我们平时用的工具,用顺手了非常简单,下面我就把几种主流数据库里最常用、最直接的方法给你列出来,你对照着自己用的数据库来选就行。

使用 RIGHT 函数(最直观的方法)

这个方法的名字就叫“右”,意思就是从右边开始取,所以非常直观好记,它在很多数据库里都通用,MySQL、SQL Server、PostgreSQL 这些。

它的写法一般是这样的: RIGHT(字段名, 你要截取的位数)

咱们举个例子,假设你有个表叫 users,里面有个字段叫 user_id,存的值可能是 "U2024052001" 这种,你现在想把最后两位 "01" 取出来,你的 SQL 语句就可以这么写:

SELECT user_id, RIGHT(user_id, 2) AS 最后两位 FROM users;

这句命令的意思就是:从 users 表里,选出 user_id 这个字段,同时再用 RIGHT 函数把这个字段值的最后两位也选出来,并且给这最后两位起个临时的列名叫“最后两位”。

数据库里怎么截取最后两位字符,简单又实用的方法分享

执行完之后,你看到的结果可能就是: | user_id | 最后两位 | | :--- | :--- | | U2024052001 | 01 | | U2024052002 | 02 | | ... | ... |

是不是超级简单?你只需要把“字段名”和“2”换成你实际需要的就行了,这个方法是我觉得最省心、最不容易出错的。

使用 SUBSTRING 或 SUBSTR 函数(功能更强大的方法)

这个函数名字的意思是“子字符串”,就是从一个完整的字符串里截取一部分,它比 RIGHT 函数更灵活,因为你可以从任意位置开始截取,不止局限于右边,它在几乎所有数据库里都存在,MySQL、SQL Server、Oracle、PostgreSQL、SQLite 都支持。

用它来截取最后两位,需要动一点点脑筋,因为它是从左边开始计数的,所以我们需要先算出最后两位的起始位置,写法稍微复杂一丢丢:

SUBSTRING(字段名 FROM 字符总长度 - 1 FOR 2) 或者另一种常见的写法: SUBSTR(字段名, 字符总长度 - 1, 2)

数据库里怎么截取最后两位字符,简单又实用的方法分享

这里的关键是要知道字符串的总长度是多少,这就需要用到另一个函数 LENGTH(在 SQL Server 里是 LEN),完整的写法通常是这样的:

SELECT user_id, SUBSTRING(user_id FROM LENGTH(user_id) - 1 FOR 2) AS 最后两位 FROM users;

我帮你拆解一下这个命令:

  1. LENGTH(user_id):先算出 user_id 这个值有多少个字符。"U2024052001" 有 11 个字符。
  2. LENGTH(user_id) - 1:用总长度减去 1,得到 10,这代表我们要从第 10 个字符开始截取(数据库通常从1开始计数,不是0)。
  3. FOR 2:表示从第10个字符开始,往后截取2个字符,正好就是第10和第11个字符,也就是最后两位。

虽然看起来比 RIGHT 函数步骤多,但 SUBSTRING 的用处更广,如果你以后需要从中间某位开始截取,比如从第3位开始截取5位,用这个函数就非常方便:SUBSTRING(字段名 FROM 3 FOR 5)

针对特定数据库的一些写法

上面两个方法已经能覆盖绝大多数情况了,但有些数据库有自己的“方言”,了解一下也没坏处。

数据库里怎么截取最后两位字符,简单又实用的方法分享

  • 在 Oracle 数据库里:除了用 SUBSTR,它还有一个专门从右边截取的函数叫 SUBSTR(字段名, -2),你没看错,它允许你使用负数。-2 就表示从倒数第2个字符开始,一直截取到末尾,这种方法写起来非常简洁。 SELECT user_id, SUBSTR(user_id, -2) AS 最后两位 FROM users;

  • 在 SQL Server 数据库里:它主要就是用 RIGHTSUBSTRING,和上面说的一样,只是求长度的函数是 LEN,而不是 LENGTH,所以用 SUBSTRING 的完整写法是: SELECT user_id, SUBSTRING(user_id, LEN(user_id) - 1, 2) AS 最后两位 FROM users;

一些实用的提醒和小技巧

光知道命令怎么写还不够,在实际用的时候,有几点特别需要注意,能帮你避免很多坑:

  1. 字段长度不足怎么办? 这是最容易出错的地方!如果你的某个 user_id 特别短,比如只有1个字符 "A",你再用 RIGHT(user_id, 2) 去取,会发生什么?数据库不会报错,它会很“智能”地把它能取到的都给你,也就是把 "A" 整个返回给你,如果你的数据长度不确定,最好先判断一下长度,或者做好可能返回少于两位字符的心理准备。

  2. 空格也算字符! 如果你的字段值后面不小心带了空格,"ABC "(注意后面有个空格),那么最后两位截取出来就是 "C "(一个C和一个空格),这在数据对比的时候经常会出问题,所以在处理前,可以先考虑用 TRIM 函数把字符串两端的空格去掉,像这样: SELECT RIGHT(TRIM(user_id), 2) AS 最后两位 FROM users; 这样就更保险了。

  3. 不只是查询,还能用在别处:截取函数不光能在 SELECT 后面用,在 WHERE(条件筛选)、UPDATE(更新数据)、ORDER BY(排序)里都能用。

    • 筛选SELECT * FROM users WHERE RIGHT(user_id, 2) = '01'; (找出所有编号以01结尾的用户)
    • 更新UPDATE users SET department_code = RIGHT(user_id, 2); (把用户的最后两位编号更新到部门代码字段里)

最省事的方法就是直接用 RIGHT 函数,简单明了,如果想用更通用、更灵活的方法,就学 SUBSTRING 配合 LENGTH,记得处理一下字段长度可能不足和空格的问题。

希望这些直接了当的方法分享能帮到你,在实际的数据库管理工具里试一试,马上就能看到效果,真的很简单。