字符/字段数据的合并

  

字符的合并,更确切的说是字段数据的合并吧。现在很多公司,尤其是工厂,上下班都要刷假卡。如有以下的数据库表,记录着员工上下班的刷卡记录。但是这样直接导出或显示,不太好,看不够直观。下面实现把每个员工每天的刷卡时间横向显示。


字符/字段数据的合并“> <br/> </p> <p>图1:打卡记录</p> <p> <br/> </p> <p> <br/> </p> <p>插入测试数据:</p> <pre类= IF  OBJECT_ID (N 'dbo.CARD_RECORD”、“U”), IS  NOT  NULL   开始   DROP  TABLE  dbo.CARD_RECORD;   结束   去   CREATE  TABLE  dbo.CARD_RECORD  (   ,,,id_  INT 身份(1,1),NOT  NULL  PRIMARY 键,   ,,,card_id  INT  NOT 空,   ,,,swipe_date  DATETIME  NOT  NULL   )   去   INSERT  INTO  dbo.CARD_RECORD  (card_id swipe_date)   SELECT “10001”、“2015 - 06 - 01, 08:21”   UNION    SELECT “10002”、“2015 - 06 - 01, 08:22”   UNION    SELECT “10001”、“2015 - 06 - 01, 12点的   UNION    SELECT “10002”、“2015 - 06 - 01,前排的   UNION    SELECT “10001”、“2015 - 06 - 01, 13:00”   UNION    SELECT “10002”、“2015 - 06 - 01, 13:01”   UNION    SELECT “10002”、“2015 - 06 - 01, 18:05”   UNION    SELECT “10001”、“2015 - 06 - 01,十八12的   UNION    SELECT “10002”、“2015 - 06 - 02年,08:31”   UNION    SELECT “10001”、“2015 - 06 - 02年,08:42”   UNION    SELECT “10001”、“2015 - 06 - 02年,“12:10   UNION    SELECT “10002”、“2015 - 06 - 02年,十二11”   UNION    SELECT “10001”、“2015 - 06 - 02年,13:00”   UNION    SELECT “10002”、“2015 - 06 - 02年,十三11”   UNION    SELECT “10001”、“2015 - 06 - 02年,18:05”   UNION    SELECT “10002”、“2015 - 06 - 02年,十八12的   UNION    SELECT “10002”、“2015 - 06 - 02年,福音》第19章34节”   UNION    SELECT “10001”、“2015 - 06 - 03, 08:36”   UNION    SELECT “10002”、“2015 - 06 - 03, 08:40”   UNION    SELECT “10001”、“2015 - 06 - 03,将近12的   UNION    SELECT “10002”、“2015 - 06 - 03,将近12的   UNION    SELECT “10001”、“2015 - 06 - 03, 12:55”   UNION    SELECT “10002”、“2015 - 06 - 03, 12:56”   UNION    SELECT “10001”、“2015 - 06 - 03, 18:05”   

编码1:插入测试数据



创建字符/字段数据合并的函数:

IF  OBJECT_ID (N 'dbo.fn_time_list”), IS  NOT  NULL   开始   ,,,DROP  FUNCTION  dbo.fn_time_list   结束   去   CREATE  FUNCTION  dbo.fn_time_list    (   @date  DATETIME,   @card_id  NVARCHAR (100)   )   RETURNS  NVARCHAR (MAX)   AS    开始   ,,,DECLARE  @char  NVARCHAR (MAX)   ,,,DECLARE  @date2 日期   ,,,SET  @char =,”   ,,,SET  @date =,演员(@date  AS 日期)   ,,,SET  @date2 =,返回(天,1,演员(@date  AS 日期)   ,,,,   ,,,SELECT  @char =, @char  +,转换(CHAR(5), 108年swipe_date), +,,,   ,,,,得到CARD_RECORD    ,,,WHERE  (swipe_date 祝辞=,@date 以及swipe_date  & lt;, @date2),以及card_id=@card_id   ,,,ORDER  BY  swipe_date  ASC   ,,,,   ,,,SET  @char =, CASE  WHEN  @char =,, THEN ”, ELSE 子串(@char 1 LEN (@char) 1),结束   ,,,,   ,,,RETURN  (@char)   结束   

代码2:字符/字段数据合并函数



最后,把数据转换一下,展示:

SELECT    ,,,DISTINCT    ,,,card_id,   ,,,转换(char (10),   ,,,swipe_date, 23), AS  swipe_date,   ,,,dbo.fn_time_list (swipe_date card_id), AS  time_list2    得到dbo.CARD_RECORD    ORDER  BY  card_id  ASC swipe_date  ASC;   

Code-3:转换显示



执行结果:

字符/字段数据的合并“> <h2 class=字符/字段数据的合并