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