执行sp_help employee_mst_bc
看下emp_num 设置的是什么类型的字段
像这种情况你应该设置的char类型的字段:
char(5) 存入数据不足5位时,sqlserver会自动补空格
nvarchar 类型 不是定长的
@Zarey: 好吧,刚查了下资料,官方文档上说是SQL校对规则属于PADSPACE,对CHAR和VARCHAR值进行比较都忽略尾部空格,和服务器配置以及SQL版本都没关系。
那就再加一个条件,用datalength函数能作为附加的精确判断的依据。
select * from employee_mst_bc where emp_num='Antony' and datalength(emp_num)=datalength('Antony')
@Supreme`: 对的,是这样,谢谢
@Supreme`: 还是不行的,你试试
@Zarey:
@Zarey: 最后一个条件datalength(UserId)=datalength('A00115')是根据数据长度做查询条件,比如datalength('A00115')长度是6,datalength('A00115 ')长度就是8了,因为带有两个空格。
@Supreme`: select datalength(emp_num) from tbl_user 查出来的长度不等于字符的长度,我现在都字段里没有空格
@Zarey: 这里面是有空格的
你这样查,他会忽略尾部空格,自然就能查出 emp_num条件为Antony的数据。但是当你加上 datalength(emp_num)=datalength('Antony') ,查询条件数据长度一致且emp_num='Antony'才可以查出符合条件的数据。你说"查出来的长度不等于字符的长度"这就证明有空格!!!
@Supreme`: 空格我现在删掉了,那是我之前的图
@Zarey: 空格删掉了,为什么查出来的长度不等于字符的长度?你仔细检查下。很有可能是你写多或写少了什么
@Supreme`:
肯定没有空格的,而且都是2倍的关系 select datalength("字符串") 这样是正常的
select datalength(字段) from table 这个长度就不对了,2倍关系
@Zarey:
因为你的是nvarchar类型,转换下
select * from employee_mst_bc where emp_num='Antony' and datalength(CONVERT(varchar,(emp_num)))=datalength('Antony')
@Supreme`: 奥 这个datalength是计算字节的,而不是字符长度,理解,谢谢
@Zarey: 是的
默认不会trim吧,
trim都是通过函数来实现的:
ltrim() 用来将一个字符串左侧的空格去掉 ,
rtrim()用来将一个字符串右侧的空格去掉
默认会的,而且只会LTRIM()
@Zarey:
是吗? sql语句,数据,和结果贴出来看一下,,
@苍枫露雨:
字段现在右边有空格
sql 语句where条件
@Zarey:
这不科学呀,没遇到过,我也不知道了,
@苍枫露雨: 你在你本地试了一下吗,没有这种情况吗
@Zarey:
本地没有sqlserver, 我在mysql试了一下,没有这个情况,
之前用sqlserver开发的时候也没有遇到过,