首页 新闻 会员 周边

SQL比较字符串

-1
悬赏园豆:5 [已解决问题] 解决于 2017-07-14 15:20

在sqlserver 中比较字符会trim左边的,不会trim右边的,现在我不想让它trim,保存原字符比较

Zarey的主页 Zarey | 初学一级 | 园豆:70
提问于:2017-07-14 11:04
< >
分享
最佳答案
0

执行sp_help employee_mst_bc 
看下emp_num 设置的是什么类型的字段
像这种情况你应该设置的char类型的字段:
char(5) 存入数据不足5位时,sqlserver会自动补空格

收获园豆:5
Supreme` | 菜鸟二级 |园豆:229 | 2017-07-14 14:31

nvarchar 类型 不是定长的

Zarey | 园豆:70 (初学一级) | 2017-07-14 14:51

@Zarey: 好吧,刚查了下资料,官方文档上说是SQL校对规则属于PADSPACE,对CHAR和VARCHAR值进行比较都忽略尾部空格,和服务器配置以及SQL版本都没关系。
那就再加一个条件,用datalength函数能作为附加的精确判断的依据。
select  * from employee_mst_bc where  emp_num='Antony' and  datalength(emp_num)=datalength('Antony')

Supreme` | 园豆:229 (菜鸟二级) | 2017-07-14 15:13

@Supreme`: 对的,是这样,谢谢

Zarey | 园豆:70 (初学一级) | 2017-07-14 15:20

@Supreme`: 还是不行的,你试试

Zarey | 园豆:70 (初学一级) | 2017-07-14 15:33

@Zarey: 

Supreme` | 园豆:229 (菜鸟二级) | 2017-07-14 15:42

@Zarey: 最后一个条件datalength(UserId)=datalength('A00115')是根据数据长度做查询条件,比如datalength('A00115')长度是6,datalength('A00115  ')长度就是8了,因为带有两个空格。

Supreme` | 园豆:229 (菜鸟二级) | 2017-07-14 15:45

@Supreme`: select datalength(emp_num) from  tbl_user  查出来的长度不等于字符的长度,我现在都字段里没有空格

Zarey | 园豆:70 (初学一级) | 2017-07-14 15:47

@Zarey: 这里面是有空格的

你这样查,他会忽略尾部空格,自然就能查出 emp_num条件为Antony的数据。但是当你加上 datalength(emp_num)=datalength('Antony') ,查询条件数据长度一致且emp_num='Antony'才可以查出符合条件的数据。你说"查出来的长度不等于字符的长度"这就证明有空格!!!

Supreme` | 园豆:229 (菜鸟二级) | 2017-07-14 15:54

@Supreme`: 空格我现在删掉了,那是我之前的图

Zarey | 园豆:70 (初学一级) | 2017-07-14 15:56

@Zarey: 空格删掉了,为什么查出来的长度不等于字符的长度?你仔细检查下。很有可能是你写多或写少了什么

Supreme` | 园豆:229 (菜鸟二级) | 2017-07-14 16:00

@Supreme`: 

肯定没有空格的,而且都是2倍的关系 select datalength("字符串")  这样是正常的

select datalength(字段) from table 这个长度就不对了,2倍关系

Zarey | 园豆:70 (初学一级) | 2017-07-14 16:04

@Zarey: 
因为你的是nvarchar类型,转换下
select  * from employee_mst_bc where  emp_num='Antony' and datalength(CONVERT(varchar,(emp_num)))=datalength('Antony')

 

Supreme` | 园豆:229 (菜鸟二级) | 2017-07-14 16:08

@Supreme`: 奥 这个datalength是计算字节的,而不是字符长度,理解,谢谢

Zarey | 园豆:70 (初学一级) | 2017-07-14 16:13

@Zarey: 是的

Supreme` | 园豆:229 (菜鸟二级) | 2017-07-14 16:16
其他回答(1)
0

默认不会trim吧,

trim都是通过函数来实现的:

ltrim() 用来将一个字符串左侧的空格去掉 ,

rtrim()用来将一个字符串右侧的空格去掉

 

苍枫露雨 | 园豆:1027 (小虾三级) | 2017-07-14 12:04

默认会的,而且只会LTRIM()

支持(0) 反对(0) Zarey | 园豆:70 (初学一级) | 2017-07-14 12:12

@Zarey: 

是吗? sql语句,数据,和结果贴出来看一下,,

支持(0) 反对(0) 苍枫露雨 | 园豆:1027 (小虾三级) | 2017-07-14 12:13

@苍枫露雨: 

字段现在右边有空格

sql 语句where条件

 

支持(0) 反对(0) Zarey | 园豆:70 (初学一级) | 2017-07-14 12:19

@Zarey: 

这不科学呀,没遇到过,我也不知道了,

支持(0) 反对(0) 苍枫露雨 | 园豆:1027 (小虾三级) | 2017-07-14 14:16

@苍枫露雨: 你在你本地试了一下吗,没有这种情况吗

支持(0) 反对(0) Zarey | 园豆:70 (初学一级) | 2017-07-14 14:18

@Zarey: 

本地没有sqlserver, 我在mysql试了一下,没有这个情况,

之前用sqlserver开发的时候也没有遇到过,

支持(0) 反对(0) 苍枫露雨 | 园豆:1027 (小虾三级) | 2017-07-14 14:25
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册