我觉得您应该首先确认一下存储在数据库中的张三,123的长度,很可能是你出入的时候就已经发生了错误。varchar类型,如果数据库中数据没有空格,取值到变量中,是绝对不可能出现空格的。所以问题很可能在你插入数据的时候就有了。这种按照长度补空格,只有char行才会有。
所以先确定一下数据库表中数据的长度到底是多少?使用len函数查询一下。
select
len(用户名),
len(密码)
from
表名字
看看长度是不是有问题。
另外,如果有空格,可以使用rtrim函数把右边的空格去掉,这样也可以保证数据的准确。
select
rtrim(用户名),
rtrim(密码)
from
表名
ltrim是去左侧空格的函数,rtrim是去右侧空格的函数。
因为SQLSERVER中没有trim函数同时去掉左侧右侧的空格,所以要分别使用ltrim和rtrim来去掉左边和右边的空格。你这个只是在右侧补了空格,使用rtrim就够用了。
update table set name=replace(name," ","");select replace(name," ","") from table;
两种方式均可,第一种将数据库中数据改变,第二种不改变数据库中的数据,直接查询。需要用到replace()函数。含义为:替换字符串;replace(原字段,“原字段旧内容“,“原字段新内容“)。
扩展资料:
oracle常用字符串函数
1、CHR
语法: chr(x)
功能:返回在数据库字符集中与X拥有等价数值的字符。CHR和ASCII是一对反函数。经过CHR转换后的字符再经过ASCII转换又得到了原来的字符。
使用位置:过程性语句和SQL语句。
2、CONCAT
语法: CONCAT(string1,string2)
功能:返回string1,并且在后面连接string2。
使用位置:过程性语句和SQL语句。
3、INITCAP
语法:INITCAP(string)
功能:返回字符串的每个单词的第一个字母大写而单词中的其他字母小写的string。单词是用空格或给字母数字字符进行分隔。不是字母的字符不变动。
使用位置:过程性语句和SQL语句。
4、LTRIM
语法:LTRIM(string1,string2)
功能:返回删除从左边算起出现在string2中的字符的string1。String2被缺省设置为单个的空格。数据库将扫描string1,从最左边开始。当遇到不在string2中的第一个字符,结果就被返回了。LTRIM的行为方式与RTRIM很相似。
使用位置:过程性语句和SQL语句。
5、NLS_INITCAP
语法:NLS_INITCAP(string[,nlsparams])
功能:返回字符串每个单词第一个字母大写而单词中的其他字母小写的string,nlsparams
指定了不同于该会话缺省值的不同排序序列。如果不指定参数,则功能和INITCAP相同。Nlsparams可以使用的形式是:
几个空格:
select length(str) -
:剔除左空格
SQL> select ltrim(' 12') a from dual;
A
--
12
:剔除右空格
SQL> select rtrim(' 12 x ') a from dual;
A
---------
12 x
:剔除两边的空格
SQL> select trim(' 12 x ') a from dual;
A
------
12 x
--------------------
:剔除所有的空格,没有现成的函数:
SQL> select replace(' 12 x ', ' ', '') a from dual;
A
---
12x
---------------------
有的时候还要注意,半角空格和全角空格。
空格个数:
参看1楼的正解
SQL> select length(' 12 x ')-length( replace(' 12 x ', ' ', '')) a from dual;
A
----------
8
-------------------------
replace 可以
SQL code
select replace('"657567556"','"','') from dual;
trim也行,其中leading 去前面的“,trailing 去后面的”,both去两边的“
SQL code
select trim(both '"' from '"657567556"') from dual;
哪个都无所谓,你只要看sql里查询出来的字符的样子,然后照样学样就可以
replace(str,str1,str2)
str是你查询出来的原始数据字符串,
str1是在str中要被替换的字符串,
str2是用来替换str1的字符串
查询语法
asc升序(从小到大,默认就是升序,可以不写) desc降序(从大到小) order by这句一定是放在最后。如果有多个列名,使用英文逗号分开,优先排序前面的,先排列前面的列名,然后再排序后面的列名。
查询全部行和列:
查询部分行业列:
select Sname,SGrade from Students
where
as取别名
取别名,再给领导汇报数据的时候,字段都是是用自己定义的数据,领导可能看不懂,怎么办?把字段换成中文来显示:
判断空值有两种,一种是有值删除后,使用=,where Name=’‘
如果是值默认的空值NULL,只能使用is,where Name is NULL
使用 top 数字 取前几条查询语句
使用百分比 top 数字 percent
另外只有日期类型比较特殊,可以使用大于等于小于的,带引号,格式不能写错。
系统函数:
字符串函数
charindex
select charindex(参数1需要找的,数据源,起始位置数字)
LEN 返回长度。(去掉最右边的空格,中间和前面的空格去不掉)
selcet len(’ M y ‘)
LTRIM 去左边的空格,嵌套使用
select len(ltrim(' M y ') //去掉左边的空格,返回
……太多了,记不住,需要的时候,到网上搜索
还有日期函数,数学函数,……
cast数据转换
select cast(文本数字 as int)
convert有格式的转换
以上就是关于关于sql中varchar的长度不正确的问题全部的内容,包括:关于sql中varchar的长度不正确的问题、oracle 去除空格、去除 sql中字段的空格等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)