首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

发现reverse 有关问题

2012-03-27 
发现reverse 问题droptable#createtable#(Namechar(10),Subjectchar(15),Resultint)insert#select张三 ,

发现reverse 问题
drop   table   #
create   table   #(Name   char(10),   Subject   char(15),     Result   int)
insert   #     select   '张三 ', '语文 ',   80  
union   all   select   '张三 ', '数学 ',90
union   all   select '张三 ', '     物理 ',   85
union   all   select '李四 ', '语文 ',   85
union   all   select '李四 ', '数学 ',   92
union   all   select '李四 ', '物理 ',   82
select   *,(ltrim((subject)))   from   #----------------变化的地方
select   *,reverse(ltrim((subject)))   from     #
结果1------------------
张三             语文                       80语文                      
张三             数学                       90数学                      
张三                 物理                   85物理                  
李四             语文                       85语文                      
李四             数学                       92数学                      
李四             物理                       82物理                      
结果2--------------------
张三             语文                       80                       文语(前面为空格)
张三             数学                       90                       学数
张三                 物理                   85                   理物
李四             语文                       85                       文语
李四             数学                       92                       学数
李四             物理                       82                       理物
----------------------------------
差别就是   第三行纪录   他物理后面的空格为什么没有去掉呢???

[解决办法]
SQL没错,以“0”表示空格,分析如下:

1.数学00000000000
00物理000000000 //原来的样子:因为char(15),所以后面自动补空格,填满15字节为止;


2.数学00000000000
物理000000000 //ltrim(subject)之后的样子;
3.00000000000学数
000000000理物 //reverse(ltrim(subject))之后的样子。

[解决办法]
空格肯定是去了,你执行下面的语句:
select *, reverse(ltrim(subject)), len = datalength(reverse(ltrim(subject))) from #

热点排行