朋友们,当我们处理数据库字段时,我们经常将整数转换为varchar类型。数字本身可以分为大小,但在转换为字符串后,原始大小概念被颠覆。
例如,88和800整数,当用作数字类型时,800大于88是毫无疑问的,但在转换为字符串后,'800'和'88'的大小被颠覆,我们将做一个小实验,作为验证,脚本如下:
声明@ num1 int=88;
声明@ num2 int=800;
如果强制转换(@ num1 as varchar)>
演员(@ num2 as varchar)
打印'''88''大于''800'''
其他
打印'''800''大于''88''';
结果如下:
实际上,这很容易理解,这是因为varchar大小比较从第一个位置开始,比较其ascii代码大小,当第一个大于另一个时,整个varchar的大小是固定的。
基于这个逻辑,当我们将int转换为varchar时,我们可以使用它来对其他字段进行排序或合并。如果尺寸或订单令人困惑,可能会影响我们的运营。我们该如何应对这种情况?什么?
实际上,它非常简单,我们可以修改转换后的位数,左侧的位数可以为零。例如,我们固定7位数字,“88”对应于“0000088”,“800”对应于“0000800”。在这个时候,如果我们比较或排序,我们不会感到困惑。
如何弥补零?原因很简单,我们首先使用6个零的字符串加一个字符串转换成数字,然后使用正确的函数拦截最右边的7位数,请参阅下面的脚本:
对('000000'+演员(@ num1作为varchar),7)
这种方法最简单。如果您不觉得上瘾,您还可以在转换为varchar后计算int的长度。根据长度,根据复制函数创建缺失的零。请参阅以下脚本:
复制('0',7-len(强制转换(@ num1 as varchar)))+强制转换(@ num1 as varchar)很明显,第一种方法更直观。如果你没有太沉迷,你也可以使用case语句直接确定不同长度的长度为零,参见下面的脚本:
Case len(强制转换(@ num1 as varchar))
当1然后'000000'+强制转换(@ num1 as varchar)
当2然后'00000'+ cast(@ num1 as varchar)
当3然后'0000'+演员(@ num1作为varchar)
当4然后'000'+ cast(@ num1 as varchar)
当5然后'00'+强制转换(@ num1 as varchar)
当6然后'0'+演员(@ num1作为varchar)
当7然后施放(@ num1作为varchar)
结束;
这显然做了一点,我相信很少有人会这样做,但这种方法也是可行的。
各种处理方式的效果如下图所示:
同样,如果你想在右侧归零,原因是相同的,这里你需要使用左边的函数,例如:
左(演员阵容(@ num1 as varchar)+'000000',7)
然而,它被添加到后面,从左侧截取。
我希望能帮到你!
【编辑推荐】
使用SQL语句备份和压缩数据库
3月数据库排名:MySQL指数继续上涨,PostgreSQL下跌
推荐|超实用的MySQL数据库乱码问题对应的方式
15个小时后,我终于评判了8本最受欢迎的SQL书籍。
什么会影响数据库查询速度以及影响MySQL性能的因素