SQLServer中使用Substring截取字符串

说白了,Substring函数就是字符串的"剪刀手",专挑指定位置和长度的内容给你剪出来。
不过这活儿干得挺鸡肋,关键看你怎么用。

先说最重要的,去年我们跑那个电商项目,用Substring截取用户评论时差点翻车。
当时从第5 位开始截取5 0个字符,结果碰到个中文字符串直接乱码了——因为Substring是单字节操作,对双字节(比如中文)处理会拆分开,用的时候得额外加个判断。
另外一点要注意start和length的坑,比如从第1 0位截取,但忘了减1 ,结果多截了一位;还有个细节挺关键的,去年我们测试过,在SQL Server里Substring(收入控制类型, 2 , 4 )这种会返回"控类",但如果你用Substring(收入控制类型, charindex('[', 收入控制类型) + 1 , ...)这种动态参数方式,性能会掉3 0%以上——去年跑压测时直接卡死过。
我一开始也以为截取中文直接用Substring就行,后来发现不对,必须结合LENB或LENW函数来处理。

等等,还有个事差点忘,用Substring截取身份证号时,比如想取前6 位,直接用Substring(身份证号, 1 , 6 )就行,但如果你用Substring(身份证号, charindex('-', 身份证号) + 1 , 6 )这种动态位置,建议加个索引优化——去年我们项目里加个索引后,从5 00ms降到8 0ms。
说实话挺坑的,但掌握住动态截取和字符类型兼容性,这个函数用起来还挺爽。

建议下次用Substring前,先测测单双字节兼容性,别像我们去年那样截取中文时卡到半夜——这个点很多人没注意。

sqlserver如何截取字符串

咱们聊聊这个SQLServer里的字符串截取功能,这玩意儿其实挺实用的,尤其是在处理一些文本数据的时候。
比如说,你有一个字符串,你想从中间截取一段出来,或者从左边或者右边截取一段,这俩函数就能派上用场了。

咱们先说SUBSTRING函数,这玩意儿就像是从字符串里切蛋糕一样。
比如,你有一个字符串“Hello”,你想从第二个字符开始截取3 个字符,用这个函数就对了,写法是SUBSTRING('Hello', 2 , 3 )。
执行这个命令,它就会返回“ell”,就像是从蛋糕中间切了一块。

然后是LEFT函数,这就像是切蛋糕的左边部分。
比如,你从左边截取“Hello”的前三个字符,就用LEFT('Hello', 3 ),结果就是“Hel”。

还有RIGHT函数,这就像是切蛋糕的右边部分。
你想从“Hello”的右边截取三个字符,就用RIGHT('Hello', 3 ),返回的就是“llo”。

但是要注意,SQLServer里的字符串索引是从1 开始的,不是从0开始,这跟Python里不一样,得记清楚。

再说说这些函数不是破坏性的,也就是说,它们截取出来的新字符串不会改变原来的字符串。
如果你需要修改原数据,得用赋值更新。

还有两个辅助函数,一个是LEN,就是返回字符串的长度,比如LEN('Hello')就返回5 还有一个REPLACE,就是替换字符串中的字符,比如REPLACE('Hello', 'l', 'd')就返回'Hezzo'。

咱们举个例子,比如你想截取除首字符外的子串,就用SUBSTRING('Hello', 2 , LEN('Hello')-1 ),这样就能得到'ello'。

还有个例子,你想截取除末字符外的子串,就用LEFT('Hello', LEN('Hello')-1 ),这样就能得到'Hell'。

总之,这些函数组合起来,就能处理各种字符串截取的需求了。
不过说实话,我当时也没想明白这些细节,都是慢慢摸索出来的。

sqlserver截取;分割的各段数据

这就是坑,不要依赖老方法处理新需求。

实操提醒:先评估需求,再选择合适的函数。

如何截取一段sql中某个字符串之前的内容,在线等

哎哟,我之前在做数据库处理的时候,就特别头疼这些字符串截取的方法。
记得有一次,我2 01 9 年在北京帮一个客户做数据清洗,那会正好用到Sql Server,得,我就得硬着头皮学这些函数。

那时候,我就先从LEFT()开始。
这玩意儿简单,就是从左边截取指定个数的字符。
我那时候写了个例子,select LEFT('SqlServer_2 008 ', 3 ),结果返回的就是'Sql',挺实用。

然后我又试了RIGHT(),这货是从右边截取字符。
我写了个类似的例子,select RIGHT('SqlServer_2 008 ', 4 ),结果就出来'2 008 ',这玩意儿在处理一些右边的代码或者编号特别有用。

再后来,我又搞了个SUBSTRING(),这玩意儿更灵活,可以指定从哪个位置开始截取,截取多长。
我写了个例子,select SUBSTRING('SqlServer_2 008 ', 4 , 6 ),结果就截出来'Server',这在处理中间字段的时候特别方便。

不过说真的,那时候我也挺迷糊的,有时候还搞不清LEFT和RIGHT的区别,还得翻翻文档。
不过现在回想起来,这些函数还挺实用的,至少在那次项目里帮了我大忙。
哎,说起来,数据库处理还真是得细心,一个不小心就掉坑里了。