本來用 Writer 寫一篇關于一列多行合并的博客來的,結果快寫完了時候,在一個插入代碼時候,崩了,重新打開,居然連草稿都沒有……哎,我也是無語了……
于是沒有心情再寫,直接發一下代碼,再順便留幾個其他博文的鏈接
1、FOR XML PATH http://www.cnblogs.com/doubleliang/archive/2011/07/06/2098775.html
2、STUFF http://www.cnblogs.com/345563452/archive/2009/10/29/1592048.html
3、Group By http://www.cnblogs.com/rainman/archive/2013/05/01/3053703.html
4、附錄:SQL字符串函數
CREATE TABLE HobbyInfo( id INT IDENTITY PRIMARY KEY, name VARCHAR(10) NOT NULL, hobby VARCHAR(20) NOT NULL)INSERT INTO HobbyInfo (name,hobby) VALUES ('LoveLong','喜歡種花')INSERT INTO HobbyInfo (name,hobby) VALUES ('LoveLong','喜歡畫畫')INSERT INTO HobbyInfo (name,hobby) VALUES ('LoveLong','癡迷人工智能')INSERT INTO HobbyInfo (name,hobby) VALUES ('LoveLong','喜歡我的龍哥')INSERT INTO HobbyInfo (name,hobby) VALUES ('Long','喜歡吃燒烤')INSERT INTO HobbyInfo (name,hobby) VALUES ('Long','喜歡看電子書')INSERT INTO HobbyInfo (name,hobby) VALUES ('Long','喜歡抽煙')INSERT INTO HobbyInfo (name,hobby) VALUES ('Long','不抽煙難受')SELECT * FROM HobbyInfoSELECT name, hobby = STUFF((SELECT ','+hobby FROM HobbyInfo WHERE name = info.name FOR XML PATH('')),1,1,'')FROM HobbyInfo infoGROUP BY name
2、CHAR() 將ASCII 碼轉換為字符。如果沒有輸入 0 ~ 255 之間的ASCII 碼值,CHAR() 返回NULL 。
3、LOWER()和UPPER() LOWER()將字符串全部轉為小 寫;UPPER()將字符串全部轉為大寫。
4、STR() 把數值型數據轉換為字符型數據。 STR (<float_expression> [,length[, <decimal>]]) length 指定返回的字符串的長度,decimal 指定返回的小數位數。如 果沒有指定長度,缺省的length 值為10, decimal 缺省值為0。 當length 或者decimal 為負值時,返回 NULL; 當length 小于小數點左邊(包括符號位)的位數時,返回length 個*; 先服從length ,再取 decimal ; 當返回的字符串位數小于length ,左邊補足空格。
二、去空格函數 1、LTRIM() 把 字符串頭部的空格去掉。 2、RTRIM() 把字符串尾部的空格去掉。 三、取子串函數 1、left() LEFT (<character_expression>, <integer_expression>) 返回character_expression 左起 integer_expression 個字符。 2、RIGHT() RIGHT (<character_expression>, <integer_expression>) 返回character_expression 右起 integer_expression 個字符。 3、SUBSTRING() SUBSTRING (<expression>, <starting_ position>, length) 返回從字符串左邊第starting_ position 個字符起length個字符的部分。 四、字符串 比較函數 1、CHARINDEX() 返回字符串中某 個指定的子串出現的開始位置。 CHARINDEX (<’substring_expression’>, <expression>) 其中substring _expression 是所要查找的字符表達式,expression 可為字符串也可為列名表達式。如果沒有發現 子串,則返回0 值。 此函數不能用于TEXT 和IMAGE 數據類型。
2、PATINDEX() 返回字符串中某個指定的子串出現的開始位置。 PATINDEX (<’%substring _expression%’>, <column_ name>) 其中子串表達式前后必須有百分號“%”否則返回值為0。 與CHARINDEX 函數不同的是,PATINDEX函數的子串中可以使用通配符,且 此函數可用于CHAR、 VARCHAR 和TEXT 數據類型。 五、字符串操作函數 1、QUOTENAME() 返回被特定字符括起來的字符串。 QUOTENAME (<’character_expression’> [, quote_ character]) 其中quote_ character 標明括字符串所用的字符,缺省值為“[]”。
2、REPLICATE() 返回一個重復 character_expression 指定次數的字符串。 REPLICATE (character_expression integer_expression) 如 果integer_expression 值為負值,則返回NULL 。 3、 REVERSE() 將指定的字符串的字符排列順序顛倒。 REVERSE (<character_expression>) 其 中character_expression 可以是字符串、常數或一個列的值。 4、 REPLACE() 返回被替換了指定子串的字符串。 REPLACE (<string_expression1>, <string_expression2>, <string_expression3>) 用 string_expression3 替換在string_expression1 中的子串string_expression2。 5、SPACE() 返回一個有指定長度的空白字符串。 SPACE (<integer_expression>) 如 果integer_expression 值為負值,則返回NULL 。 6、 STUFF() 用另一子串替換字符串指定位置、長度的子串。 STUFF (<character_expression1>, <start_ position>, <length>,<character_expression2>) 如果起始位置為負或長度值為負,或者起始位置大于character_expression1 的長度,則返回NULL 值。 如果 length 長度大于character_expression1 中 start_ position 以右的長度,則 character_expression1 只保留首字符。
六、數據類型轉換函數 1、CAST() CAST (<expression> AS <data_ type>[ length ]) 2、CONVERT() CONVERT (<data_ type> [ length ], <expression> [, style]) 1)data_type為SQL Server 系統定義的數據類型,用戶自定義的數據類型不能在此使用。 2)length用于指定數據的長度,缺省值為30。 3)把CHAR或 VARCHAR類型轉換為諸如INT或SAMLLINT這樣的INTEGER類型、結果必須是帶正號或負號的數值。 4)TEXT類型到CHAR 或VARCHAR類型轉換最多為8000個字符,即CHAR或VARCHAR數據類型是最大長度。 5)IMAGE類型存儲的數據轉換到 BINARY或VARBINARY類型,最多為8000個字符。 6)把整數值轉換為MONEY或SMALLMONEY類型,按定義的國家的貨幣 單位來處理,如人民幣、美元、英鎊等。 7)BIT類型的轉換把非零值轉換為1,并仍以BIT類型存儲。 8)試圖轉換到不同長度的數據 類型,會截短轉換值并在轉換值后顯示“+”,以標識發生了這種截斷。 9)用CONVERT() 函數的style 選項能以不同的格式顯示日期 和時間。style 是將DATATIME 和SMALLDATETIME 數據轉換為字符串時所選用的由SQL Server 系統提供的轉換樣式編 號,不同的樣式編號有不同的輸出格式。
七、日期函數 1、 day(date_expression) 返回date_expression中的日期值 2、month(date_expression) 返回date_expression中的月 份值 3、year(date_expression) 返回 date_expression中的年份值 4、DATEADD() DATEADD (<datepart>, <number>, <date>) 返回指定日期date 加上指定的額外日期間隔number 產生的新日期。參數“datepart” 取值如下:
5、DATEDIFF() DATEDIFF (<datepart>, <date1>, <date2>) 返回兩個指定日期在datepart 方面的不同之處,即date2 超過date1的差距值,其結果值是一個帶有正負號的整數值。 6、DATENAME() DATENAME (<datepart>, <date>) 以字符串的形式返回日期的指定部分此部分。由datepart 來指定。 7、 DATEPART() DATEPART (<datepart>, <date>) 以整數值 的形式返回日期的指定部分。此部分由datepart 來指定。 DATEPART (dd, date) 等同于DAY (date) DATEPART (mm, date) 等 同于MONTH (date) DATEPART (yy, date) 等同于YEAR (date) 8、GETDATE() 以DATETIME 的缺省格式返回系統當前的日期和時間
element