第二篇 重要函数应用1

第二篇 重要函数应用

1.行转列 (单列多行 转 单列一行) 

说明: 单字段(列)多行转单列一行; --dbo.wg_getbrudt()

 

---多行日期时间转单行时间字符串

create table emptime (empno varchar(50),ddate datetime)

insert emptime

values('0001','2011-01-01 08:00:33')

insert emptime

values('0001','2011-01-01 09:06:000')

insert emptime

values('0001','2011-01-01 12:10:000')

insert emptime

values('0001','2011-01-01 15:20:000')

 

go

/*--定义行转列函数

alter FUNCTION dbo.wg_getbrudt(

@empno varchar(50),  --员工工号

@ddate datetime        --刷卡日期时间

)

RETURNS varchar(255)

as

begin

 declare @Alltimes varchar(8000)

 select @Alltimes= ( case when isnull(@Alltimes,'')='' then '' else @Alltimes+ ',' end )   

                   +left(right(convert(varchar(50),a.ddate,121),12),5)

  from emptime a

  where a.empno=@empno and convert(char(10),a.ddate,121)=@ddate

 

 --返回一行字符串

 return isnull(@Alltimes,'')

end

 */

 

select left(right(convert(varchar(50),a.ddate,121),12),5) time,empno,ddate from emptime a

/*

time       empno     ddate         

---------- -------   ----------------------------

08:00      0001      2011-01-01 08:00:33.000

08:00      0001      2011-01-01 08:00:33.000

09:06      0001      2011-01-01 09:06:00.000

12:10      0001      2011-01-01 12:10:00.000

15:20      0001      2011-01-01 15:20:00.000

*/

go

select '0001' empno, dbo.wg_getbrudt('0001','2011-01-01') as alltime  --行转列函数应用

/*

empno alltime   

----- ----------------------------------   

0001  08:00,08:00,09:06,12:10,15:20

*/

drop table emptime

go

小结: 转字符串也是同样的方式. 关键在于此代码的执行效率,如果使用while方式循环拼接,效率很慢.

   注意: 大数据量的情况下,可以对 emptime 表中 empno+ddate建立索引,则效率会更有保障.

   备忘提示: 在合并字符串后,如果是全是英文字符串,则在单据中单元格中不会自动换行,如果要自换行则字符串加中文全角逗号区分,(字串中间有中文才能自动换行)如下图:

  

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值