SQL 字符串函数如何截取最后几位?

写功能是最方便的。
只需划掉最后几位数字即可。

例如SQLServer: SQL right(phone, 4 )
直接获取最后4 个号码。

MySQL 也可以工作: SQL right(phone, 4 )
无法执行 PostgreSQL。
需要使用: SQL 子字符串(来自电话长度(电话)
4 for 4 )
或: SQL 对(电话,4 )
他们支持。

Oracle特别简单: SQL SUBSTR(phone, -4 )
负数直接从后到前计数。

请注意,SQL Server 的 LEN 函数会吃掉尾随空格。
首先使用 RTRIM 删除空格: SQL 右(RTRIM(电话), 4 )
如果该字段为空或不够长,就会出现问题。
需要做出的决定: SQL 案例 当长度(phone) >=4 则右(phone, 4 ) 否则为零 结束
首先选择合适的。
如果这不起作用,请再次使用 SUBSTRING。
Oracle 选择 SUBSTR。

由您决定使用哪个数据库。

sql语句,能够截取指定字段后面的一个字符串吗?

哎,刚开始搞SQL的时候,这两个函数让我很头疼。
CHARINDEX和SUBSTRING,用在正确的地方,确实省事。

我记得有一年我正在帮助一家企业准备报告。
客户表中联系人姓名一栏,有的写“张三”,有的写“王莉莉”,有的写“史密斯·约翰”。
想想看,在调查顾客时无法区分名字和姓氏是多么不方便。

当时我觉得姓和名之间应该有一个空格。
所以我使用了 CARINDEX。
找出这个地方在哪里。
代码大概是这样的:
sql 选择前 5 名 SubsSTRING(联系人姓名, CHARINDEX('', 联系人姓名) + 1 , LN(联系人姓名)) AS [姓氏] 来自客户
你看,CHARINDEX('', ContactName) 获取的是位置位置。
然后 SUBSTRING 开始修剪空格后的一位数字并修剪到字符串的末尾。
嘿,现在没关系了,我刚刚知道了姓氏。

然后我遇到了另一种情况。
有朋友写了一个查询,结果有时正确,有时错误。
我一看,哦,他写错了。
这是他写的:
sql SubsSTRING(联系人姓名, CHARINDEX('', 联系人姓名), LN(联系人姓名))
看它的写法,CHARINDEX('', ContactName)找到位置,然后SUBSTRING从那个位置切到末尾。
想象一下,如果联系人姓名是“张三”,CHARINDEX('', ContactName) 返回 2 ,SUBSTRING 从第二个字符开始,即“三”。
这个姓氏是不是错过了?
当时我告诉他,你看,CHARINDEX返回的是位置的位置,你得从空格后面截断开始,所以应该是:
sql SubsSTRING(联系人姓名, CHARINDEX('', 联系人姓名) + 1 , LN(联系人姓名))
这是正确的。
他一听,心想,哦,原来如此。
后来,每次他写这样的查询时,他都会记得+1
所以你看,当你使用CARINDEX和SUBSTRING时,你必须特别注意那个空格。
缺少一位数字,结果可能全部错误。
这是一项你必须小心的工作。

sql语句,如何截取指定字段某一个字符出现后的后面的字符串吗

更具体地说,使用SQL Server截取逗号后的字符串依赖于CHARINDEX和SUBSTRING这两个函数。
我们先来说说最重要的事情。
CHARINDEX 搜索逗号位置。
比如我们去年跑的电商项目,有一个订单。
我们想要覆盖用户声明中的产品代码。
我们注意到 CHARINDEX 返回的数字直接添加到逗号后面的起始位置。
还有一点是SUBSTRING需要传递三个参数。
起始位置是 CHARINDEX+1 需要计算长度。
只需从总长度中减去找到的位置即可。
去年,该项目的总数据量约为 3 ,000 条。
这个公式确实很稳定。
还有一个更重要的细节。
如果字段中没有逗号,CHARINDEX 将返回 0。
目前,SUBSTRING 将抛出错误。
记得添加条件来评估。
说实话,有点混乱。
一开始我以为可以直接用CHARINDEX,但是后来发现不对,必须加1 等等,还有一点,如果逗号前面只有一个字符,比如“1 ,内容”,计算长度的时候要小心,不然不加1 就会出错。
我觉得这个组合值得尝试。