sql server和mysql常用sql语法 简单,萌新

mysql和sql server常用方法

数据库sql积累

0.触发器

1.mysql

2.sql server

CREATE TRIGGER 触发器名 BEFORE|AFTER 触发事件(之前/之后) 
on 表名字 FOR EACH ROW BEGIN
执行语句列表
END
CREATE TRIGGER [dbo].[Untitled]
ON [dbo].[DY_PRO_MODULE_SECURITY]
WITH EXECUTE AS CALLER
FOR INSERT, UPDATE   --针对 增加和修改实践触发
AS
BEGIN
SET NOCOUNT ON; --这块暂时不知道是什么写死
	DECLARE @ITEM_NAME VARCHAR(255), @CONTENT VARCHAR(255), @STANDARD VARCHAR(255), 
	 @businessId VARCHAR(255),@INSPECTION_NUMBER VARCHAR(255) --取几个字段名字,给地址空间
	 SELECT @businessId = BUSINESS_ID FROM inserted   --插入后查到这条数据的那些字段放到这个里面
	 	SELECT @ITEM_NAME = ITEM_NAME FROM inserted
	 	SELECT @CONTENT = CONTENT FROM inserted
	 	SELECT @STANDARD = STANDARD FROM inserted
	 	SELECT @INSPECTION_NUMBER = INSPECTION_NUMBER FROM inserted  --具体的触发器sql,这里的数据是上面取到的数据
	UPDATE DY_PRO_MODULE_SECURITY SET NAME=isNUll(@ITEM_NAME+'/','')+isNUll(@CONTENT+'/','')+isNUll(@STANDARD+'/','')+ isNUll(@STANDARD+'/','') WHERE BUSINESS_ID = @businessId  

END

1.增

1插入全部字段

1.1所有的字段名都写出来
INSERT INTO 表名 (字段名 1, 字段名 2, 字段名 3…) VALUES (值 1, 值 2, 值 3);
1.2不写字段名
INSERT INTO 表名 VALUES (值 1, 值 2, 值 3…);

2插入部分数据

INSERT INTO 表名 (字段名 1, 字段名 2, ...) VALUES (值 1, 值 2, ...);

2.删

1不带条件删除数据

DELETE FROM 表名;

2带条件删除数据

DELETE FROM 表名 WHERE 字段名=值;

3.改

1不带条件修改数据

UPDATE 表名 SET 字段名=值; (--修改所有的行)

2带条件的修改

UPDATE 表名 SET 字段名=值 WHERE 字段名=值;

4.查

1.普通查询

1使用*表示所有列
SELECT * FROM 表名;
2查询指定列的数据,多个列之间以逗号分隔
SELECT 字段名1,字段名2,字段名3,… FROM 表名;
3条件查询
SELECT 字段名 FROM 表名 WHERE 条件; (条件中可以进行简短逻辑运算and,or,not和比较预算符>,<,<=,>=,=,<>(不等于),IS null(查询某一列为NULL的值))
4模糊查询
SELECT 字段名 FROM 表名 WHERE LIKE ‘通配符字符串’; (通配符% 匹配任意多个字符串 通配符-匹配一个字符)

对于别名的使用
使用别名的好处: 显示的时候使用新的名字,并不修改表的结构。
1对列指定别名
SELECT 字段名 1 AS 别名, 字段名 2 AS 别名… FROM 表名;
2对列和表同时指定别名
SELECT 字段名 1 AS 别名, 字段名 2 AS 别名… FROM 表名 AS 表别名;

2.多表连接查询

1.左外连接

左外连接会返回左表的所有记录和右表中匹配记录的组合(如果右表中无匹配记录, 来自于右表的所有列的值设为 NULL). 如果左表的一行在右表中存在多个匹配行, 那么左表的行会复制和右表匹配行一样的数量, 并进行组合生成连接结果.

 select   a.*,b.*   from   a   left   join   b     on   a.id=b.parent_id

2.右外连接

右外连接, 亦简称右连接, 它与左外连接完全类似, 只不过是作连接的表的顺序相反而已.右连接操作返回右表的所有行和这些行在左表中匹配的行(没有匹配的, 来源于左表的列值设为 NULL).

 select   a.*,b.*   from   a   right   join   b     on   a.id=b.parent_id

3.完全外连接

完整外部联接返回左表和右表中的所有行。当某行在另一个表中没有匹配行时,则另一个表的选择列表列包含空值。如果表之间有匹配行,则整个结果集行包含基表的数据值。

 select   a.*,b.*   from   a   full   join   b     on   a.id=b.parent_id

4.内连接

内联接使用比较运算符根据每个表共有的列的值匹配两个表中的行。例如,检索 students和courses表中学生标识号相同的所有行。

select   a.*,b.*   from   a   inner   join   b     on   a.id=b.parent_id

3.INSERT INTO SELECT语句与SELECT INTO FROM语句区别

1.INSERT INTO SELECT语句
语句形式为:Insert into Table2(field1,field2,…) select value1,value2,… from Table1
或者:Insert into Table2 select * from Table1
2.SELECT INTO FROM语句
语句形式为:SELECT vale1, value2 into Table2 from Table1
或者 SELECT table into Table2 from table
区别,A情况对于存在表table2,然后查询出的数据放入table2
B不存在table2 ,查询出结果后新建表放入table2
由于查询会锁表,推荐对于条件建立所以

5.聚集函数分组

5.1Mysql

GROUP BY (分组)

GROUP BY我们可以先从字面上来理解,GROUP表示分组,BY后面写字段名,就表示根据哪个字段进行分组,如果有用Excel比较多的话,GROUP BY比较类似Excel里面的透视表。
GROUP BY必须得配合聚合函数来用,分组之后你可以计数(COUNT),求和(SUM),求平均数(AVG)等。

select  a.name,sum(a.number) from   a  where a.PBID="XXXX" GROUP BY  a.number
  • count() 计数
  • sum() 求和
  • avg() 平均数
  • max() 最大值

HAVING(筛选)

HAVING相当于条件筛选,但它与WHERE筛选不同,HAVING是对于GROUP BY对象进行筛选。HAVING里面还可以写聚集函数

select a.name,sum(a.number) from   a  where a.PBID="XXXX" GROUP BY  a.number  HAVING a.number>="100"

ORDER BY

ORDER BY 语句用于根据指定的列对结果集进行排序。

ORDER BY 语句默认按照升序对记录进行排序。

1.asc 升序,可以省略,是数据库默认的排序方式
2.desc 降序,跟升序相反。

6.分页查询

select 查询列表
from 表
【join type join2
on 连接条件
where 筛选条件
group by 分组字段
having 分组后的筛选
order by 排序的字段】
limitoffset,】size;

offset要显示条目的起始索引(起始索引从0开始)
size 要显示的条目个数

7.常用函数

1.mysql

1.时间处理类

date_format(date, format) 函数,MySQL日期格式化函数date_format() 时间转字符串
unix_timestamp() 函数 时间转时间戳 字符串转时间戳
str_to_date(str, format) 函数 字符串转时间
from_unixtime(unix_timestamp, format) 函数,MySQL时间戳格式化函数from_unixtime **时间戳转字符串 ** 时间戳转时间

2.时间转字符串

  1. select date_format(now(), ‘%Y-%m-%d’);
  2. #结果:2016-01-05
时间转时间戳
  1. select unix_timestamp(now());
  2. #结果:1452001082
字符串转时间
  1. select str_to_date(‘2016-01-02’, ‘%Y-%m-%d %H’);
  2. #结果:2016-01-02 00:00:00
字符串转时间戳
  1. elect unix_timestamp(‘2016-01-02’);
  2. #结果:1451664000
时间戳转时间
  1. select from_unixtime(1451997924);
  2. #结果:2016-01-05 20:45:24
时间戳转字符串
  1. select from_unixtime(1451997924,’%Y-%d’);
  2. //结果:2016-01-05 20:45:24

2.数据处理类

1.保留小数

1.round(x,d) :用于数据的四舍五入,round(x) ,其实就是round(x,0),也就是默认d为0;

SELECT ROUND(100.3465,2),ROUND(100,2),ROUND(0.6,2),ROUND(114.6,-1);

结果分别:100.35,1000.6,110

2.TRUNCATE(x,d):函数返回被舍去至小数点后d位的数字x。若d的值为0,则结果不带有小数点或不带有小数部分。若d设为负数,则截去(归零)x小数点左起第d位开始后面所有低位的值。

SELECT TRUNCATE(100.3465,2),TRUNCATE(100,2),TRUNCATE(0.6,2),TRUNCATE(114.6,-1);

结果分别:100.34,1000.6,110

FORMAT(X,D):强制保留D位小数,整数部分超过三位的时候以逗号分割,并且返回的结果是string类型的

SELECT FORMAT(100.3465,2),FORMAT(100,2),FORMAT(,100.6,2);

结果分别:100.35,100.00100.60

convert(value,type);类型转换,相当于截取``

type:

CAST(xxx AS 类型), CONVERT(xxx,类型)。

二进制,同带binary前缀的效果 : BINARY    
字符型,可带参数 : CHAR()     
日期 : DATE     
时间: TIME     
日期时间型 : DATETIME     
浮点数 : DECIMAL      
整数 : SIGNED     
无符号整数 : UNSIGNED 
SELECT CONVERT(100.3465,DECIMAL(10,2)), CONVERT(100,DECIMAL(10,2)),CONVERT(100.4,DECIMAL(10,2));

结果分别:100.35,100100.4

2.数据类型转换

结果分别:100.34,100,0.6,110

3.控制或其他情况处理类

1.if函数
IF(expr1,expr2,expr3)
--如果expr1是TRUE(expr1<>0且expr1<>NULL),那么IF()返回expr2,否则它返回expr3。IF()返回一个数字或字符串值,取决于它被使用的上下文。
IF(xxx,xxx,yyy)
--如果xxx为null,则返回yyy;不为null,则返回xxx
2.ifNull函数
IFNULL(expr1,expr2)  
--如果expr1不是NULL,IFNULL()返回expr1,否则它返回expr2。IFNULL()返回一个数字或字符串值,取决于它被使用的上下文环境。
IFNULL(xxx,yyy)  
 --如果xxx为null,返回yyy;不为null,返回xxx

4.三元运算

case when 条件 then (条件为true时执行) else(条件为false时执行) end /*end不可少*/

select *,if(expr1,expr2,expr3) from 表名

2.SqlServer

1.时间处理类

1.时间格式转换对照表,常用23(保留年月日) 和120(保留到秒) (此函数可以做到日期和字符串互转 )

日期转字符串

CONVERT(varchar(100), GETDATE(), 23):

字符串转日期

SELECT CONVERT(datetime,‘2020-03-04’,23)

Select CONVERT(varchar(100), GETDATE(), 0): 05 16 2006 10:57AM
Select CONVERT(varchar(100), GETDATE(), 1): 05/16/06
Select CONVERT(varchar(100), GETDATE(), 2): 06.05.16
Select CONVERT(varchar(100), GETDATE(), 3): 16/05/06
Select CONVERT(varchar(100), GETDATE(), 4): 16.05.06
Select CONVERT(varchar(100), GETDATE(), 5): 16-05-06
Select CONVERT(varchar(100), GETDATE(), 6): 16 05 06
Select CONVERT(varchar(100), GETDATE(), 7): 05 16, 06
Select CONVERT(varchar(100), GETDATE(), 8): 10:57:46
Select CONVERT(varchar(100), GETDATE(), 9): 05 16 2006 10:57:46:827AM
Select CONVERT(varchar(100), GETDATE(), 10): 05-16-06
Select CONVERT(varchar(100), GETDATE(), 11): 06/05/16
Select CONVERT(varchar(100), GETDATE(), 12): 060516
Select CONVERT(varchar(100), GETDATE(), 13): 16 05 2006 10:57:46:937
Select CONVERT(varchar(100), GETDATE(), 14): 10:57:46:967
Select CONVERT(varchar(100), GETDATE(), 20): 2006-05-16 10:57:47
Select CONVERT(varchar(100), GETDATE(), 21): 2006-05-16 10:57:47.157
Select CONVERT(varchar(100), GETDATE(), 22): 05/16/06 10:57:47 AM
Select CONVERT(varchar(100), GETDATE(), 23): 2006-05-16
Select CONVERT(varchar(100), GETDATE(), 24): 10:57:47
Select CONVERT(varchar(100), GETDATE(), 25): 2006-05-16 10:57:47.250
Select CONVERT(varchar(100), GETDATE(), 100): 05 16 2006 10:57AM
Select CONVERT(varchar(100), GETDATE(), 101): 05/16/2006
Select CONVERT(varchar(100), GETDATE(), 102): 2006.05.16
Select CONVERT(varchar(100), GETDATE(), 103): 16/05/2006
Select CONVERT(varchar(100), GETDATE(), 104): 16.05.2006
Select CONVERT(varchar(100), GETDATE(), 105): 16-05-2006
Select CONVERT(varchar(100), GETDATE(), 106): 16 05 2006
Select CONVERT(varchar(100), GETDATE(), 107): 05 16, 2006
Select CONVERT(varchar(100), GETDATE(), 108): 10:57:49
Select CONVERT(varchar(100), GETDATE(), 109): 05 16 2006 10:57:49:437AM
Select CONVERT(varchar(100), GETDATE(), 110): 05-16-2006
Select CONVERT(varchar(100), GETDATE(), 111): 2006/05/16
Select CONVERT(varchar(100), GETDATE(), 112): 20060516
Select CONVERT(varchar(100), GETDATE(), 113): 16 05 2006 10:57:49:513
Select CONVERT(varchar(100), GETDATE(), 114): 10:57:49:547
Select CONVERT(varchar(100), GETDATE(), 120): 2006-05-16 10:57:49
Select CONVERT(varchar(100), GETDATE(), 121): 2006-05-16 10:57:49.700
Select CONVERT(varchar(100), GETDATE(), 126): 2006-05-16T10:57:49.827

![](https://img-blog.csdnimg.cn/img_convert/a586640be9de5c7c9852785eaaec66be.gif#align=left&display=inline&height=16&margin=[object Object]&originHeight=16&originWidth=11&size=0&status=done&style=none&width=11)Sql Server中的日期与时间函数

1.  当前系统日期、时间 
    select getdate()  

2. dateadd  在向指定日期加上一段时间的基础上,返回新的 datetime 值
   例如:向日期加上2select dateadd(month,1,'2004-10-15')  --返回:2004-10-17 00:00:00.000 

3. datediff 返回跨两个指定日期的日期和时间边界数。
   select datediff(day,'2004-09-01','2004-09-18')   --返回:17

4. datepart 返回代表指定日期的指定日期部分的整数。
  select DATEPART(month, '2004-10-15')  --返回 10

5. datename 返回代表指定日期的指定日期部分的字符串
   select datename(weekday, '2004-10-15')  --返回:星期五

6. day(), month(),year() --可以与datepart对照一下

select 当前日期=convert(varchar(10),getdate(),120) 
,当前时间=convert(varchar(8),getdate(),114) 

select datename(dw,'2004-10-15') 

select 本年第多少周=datename(week,'2004-10-15')
      ,今天是周几=datename(weekday,'2004-10-15')
函数参数/功能
GetDate( )返回系统目前的日期与时间
DateDiff (interval,date1,date2)以interval 指定的方式,返回date2 与date1两个日期之间的差值 date2-date1
DateAdd (interval,number,date)以interval指定的方式,加上number之后的日期
DatePart (interval,date)返回日期date中,interval指定部分所对应的整数值
DateName (interval,date)返回日期date中,interval指定部分所对应的字符串名称
缩 写(Sql Server)Access 和 ASP说明
YearYyyyyy年 1753 ~ 9999
QuarterQqq季 1 ~ 4
MonthMmm月1 ~ 12
Day of yearDyy一年的日数,一年中的第几日 1-366
DayDdd日,1-31
WeekdayDww一周的日数,一周中的第几日 1-7
WeekWkww周,一年中的第几周 0 ~ 51
HourHhh时0 ~ 23
MinuteMin分钟0 ~ 59
SecondSss秒 0 ~ 59
MillisecondMs-毫秒 0 ~ 999

2.数据精度处理类

1.保留小数
  1. 使用 Round() 函数,如 Round(@num,2) 参数 2 表示 保留两位有效数字。
  2. 更好的方法是使用 Convert(decimal(18,2),@num) ) 实现转换,decimal(18,2) 指定要保留的有效数字。 decimal(18,4) 总共能存16位数字,末尾4位是小数(小数点不算在长度内)

这两个方法有一点不同:使用 Round() 函数,如果 @num 是常数,如 Round(2.3344,2) 则 会在把有效数字后面的 变为0 ,成 2.3300。但 Convert() 函数就不会。

3.select cast(round(56.19191,0) as int)使用四舍五入,然后保留整数部分;

2.数据类型转换
1.convert(int,字段名) 例如:select convert(int,'3')

2.cast(字段名 as int) 例如:select cast('3' as int)
二进制,同带binary前缀的效果 : BINARY    
字符型,可带参数 : CHAR()     
日期 : DATE     
时间: TIME     
日期时间型 : DATETIME     
浮点数 : DECIMAL      
整数 : SIGNED     
无符号整数 : UNSIGNED 
SELECT CONVERT(100.3465,DECIMAL(10,2)), CONVERT(100,DECIMAL(10,2)),CONVERT(100.4,DECIMAL(10,2));

结果分别:100.35,100100.4

3.控制或其他情况处理类

1.空值替换
SELECT COALESCE('',0)    结果0
SELECT COALESCE('    ',0)   结果0
SELECT COALESCE(null,0)    结果0
SELECT COALESCE(123,0)       结果123
 
SELECT ISNULL('',0)       结果''
SELECT ISNULL(null,0)     结果0
SELECT ISNULL(123,0)    结果123
---由结果结果可以看出COALESCE函数对于空值处理和NULL值都起作用。

4.选择CASE的用法和CHECK 约束

1.CASE的用法
--简单Case函数
CASE sex
WHEN '1' THEN '男'
WHEN '2' THEN '女'
ELSE '其他' END

--Case搜索函数
CASE WHEN sex = '1' THEN '男'
WHEN sex = '2' THEN '女'
ELSE '其他' END
--in用法
CASE WHEN col_1 IN ( 'a', 'b') THEN '第一类'
WHEN col_1 IN ('c')  THEN '第二类'
ELSE'其他' END


SELECT 
    CASE WHEN salary <= 500 THEN '1' 
    WHEN salary > 500 AND salary <= 600  THEN '2' 
    WHEN salary > 600 AND salary <= 800  THEN '3' 
    WHEN salary > 800 AND salary <= 1000 THEN '4' 
    ELSE NULL END salary_class, -- 别名命名
    COUNT(*)  
FROM    Table_A 
GROUP BY 
    CASE WHEN salary <= 500 THEN '1' 
    WHEN salary > 500 AND salary <= 600  THEN '2' 
    WHEN salary > 600 AND salary <= 800  THEN '3' 
    WHEN salary > 800 AND salary <= 1000 THEN '4' 
    ELSE NULL END;

5.CHECK 约束

select
CHECK(xxx>0)
from xxx
select
CHECK(xxx=1 or xxx=2)
from xxx

6.sql server字符替换

生成UUID

select newid()

B1A1253D-0C27-4B7C-B9B3-55AC032239BD

select cast(REPLACE(NEWID(), ‘-’, ‘’) as varchar(32)) as uuid
REPLACE把’-'替换为空字符串

962FE0EDE23043B8AD0E913B306A7696

7.结果集

ISNULL只作用于查询出数据后字段为NULL可以替换生效、如果查询的时候这条数据本身为NULL、字段替换时ISNULL则不生效。

解决方法:先用 if exists(结果集)判断这条数据是否存在(也就是说这条select这条sql有没有结果集),BEGIN 表示语句块的开始;END 表示语句块的结束(加不加 BEGIN END 代码块都可以)。如果满足条件直接在下方写 SQL。不满足条件时,则在 ELSE 下方写 SQL。如此,数据进行了替换。

IF EXISTS (
	SELECT
		ISNULL(historyval, 0.0)
	FROM
		ce_bf_l_energyh_t_2
	WHERE
		tagname = '123'
)
BEGIN
	--如果存在
	SELECT
		ISNULL(historyval, 0.0)
	FROM
		ce_bf_l_energyh_t_2
	WHERE
		tagname = '123'
	END
	ELSE
 
	BEGIN
		--如果不存在
		SELECT
			0.0
		END

8.sql的正则

PATINDEX ( ‘%pattern%’ , expression )

返回pattern字符串在表达式expression里第一次出现的位置,起始值从1开始算。
pattern字符串在expression表达式里没找就返回0,对所有有效的文本和字符串就是有效的数据类型。
select patindex(’%[d]%’,‘rcrdsddddaadadffdr’)
返回4,[]中d在字符串rcrdsddddaadadffdr的第一次出现的位置。
select patindex(’%[cd]%’,‘rcrdsdddrdaadadffdr’)
返回2,[]中c,d在其中一个的位置,返回最先出现的这个位置,c在此字符串里第一次出现位置是2,而d是4,结果取最先的那个。
select patindex(’%[sd]%’,‘rcrdsdddrdaadadffdr’)
返回4,[]中c,d在其中一个的位置,返回最先出现的这个位置,s在此字符串里第一次出现位置是5,而d是4,结果取最先的那个。
select patindex(’%[^r]%’,‘rrrdsdddrdaadadffdr’)
返回4,除[]中的字符串的匹配字符,第一次出现d不在[^r]里,所以就找到第一次这位。
select patindex(’%[^rd]%’,‘rrrdsdddrdaadadffdr’)
返回5,除[]中的字符串的匹配字符,第一次出现s不在[^rd]里,所以就找到第一次这位。
select patindex(’%[^rsd]%’,‘rrrdsdddrdaadadffdr’)
返回11,除[]中的字符串的匹配字符,第一次出现a不在[^rsd]里,所以就找到第一次这位。

9 字符串截取 SUBSTRING(str,por,len)

从str中的por开始截取长度为len的字符串

10.STUFF函数的用法

1.1官方解释

STUFF 函数将字符串插入到另一个字符串中。 它从第一个字符串的开始位置删除指定长度的字符;然后将第二个字符串插入到第一个字符串的开始位置。

1.2 语法格式

STUFF ( character_expression , start , length ,replaceWith_expression )

1.3 参数详解

1、character_expression
字符数据的表达式。character_expression 可以是常量、变量,也可以是字段或二进制字段。
2、start
start用来指定删除和插入开始位置的数值。 如果 start 值为负或为零,则返回空字符串。 如果 start 的长度大于第一个 character_expression,则返回空字符串。start 的类型也可以是 bigint。注意:start 值1 表示第一个字符。
3、length
length用来指定要删除的字符个数。 如果 length值 为负,则返回空字符串。 如果 length 的长度大于第一个 character_expression,则最多可以删除到最后一个 character_expression 中的最后一个字符。 如果 length 为零,则插入在 start 位置发生,并且不会删除任何字符。length 的类型也可以是 bigint。
4、replaceWith_expression
字符数据的表达式。character_expression 可以是常量、变量,也可以是字段或二进制字段。 此表达式从 start 开始替换 length 个字符的 character_expression。 如果 replaceWith_expression 为 NULL,则在不插入任何内容的情况下删除字符。
5、返回类型
如果 character_expression 是支持的字符数据类型之一,则返回字符数据。如果 character_expression 是支持的二进制数据类型之一,则返回二进制数据。
6、备注
如果开始位置或长度值是负数,或者开始位置大于第一个字符串的长度,则返回 Null 字符串。 如果开始位置为 0,则返回 Null 值。 如果要删除的长度大于第一个字符串的长度,则删除到第一个字符串中的第一个字符。
如果结果值大于返回类型支持的最大值,则会引发错误。

1.4 STUFF实例
select STUFF('hello',1,1,'') as 删除字符列  -- 删除第一个字符
select STUFF('hello',4,2,'aa') as 替换字符列 -- 将lo 替换为 aa

11 FOR XML PATH 函数用法

一.FOR XML PATH 简单介绍
**![](https://img-blog.csdnimg.cn/img_convert/1c73e4093ad8b932cfd930fca99a4d5e.png#align=left&display=inline&height=76&margin=[object Object]&originHeight=76&originWidth=330&size=0&status=done&style=none&width=330)

SELECT * FROM @hobby FOR XML PATH
<row> 
  <hobbyID>1</hobbyID> 
  <hName>爬山</hName>
</row>
<row>  
  <hobbyID>2</hobbyID>
  <hName>游泳</hName>
</row>
<row> 
  <hobbyID>3</hobbyID>  
  <hName>美食</hName>
</row>

由此可见FOR XML PATH 可以将查询结果根据行输出成XML各式!
那么,如何改变XML行节点的名称呢?代码如下:

SELECT * FROM @hobby FOR XML PATH('MyHobby')
<MyHobby>
  <hobbyID>1</hobbyID>
  <hName>爬山</hName>
</MyHobby>
<MyHobby>
  <hobbyID>2</hobbyID>
  <hName>游泳</hName>
</MyHobby>
<MyHobby>
  <hobbyID>3</hobbyID>
  <hName>美食</hName>
</MyHobby>

这个时候细心的朋友一定又会问那么列节点如何改变呢?还记的给列起别名的关键字AS吗?对了就是用它!代码如下:

SELECT hobbyID as 'MyCode',hName as 'MyName' FROM @hobby FOR XML PATH('MyHobby')
<MyHobby>
  <MyCode>1</MyCode>
  <MyName>爬山</MyName>
</MyHobby>
<MyHobby>
  <MyCode>2</MyCode>
  <MyName>游泳</MyName>
</MyHobby>
<MyHobby>
  <MyCode>3</MyCode>
  <MyName>美食</MyName>
</MyHobby>

噢! 既然行的节点与列的节点我们都可以自定义,我们是否可以构建我们喜欢的输出方式呢?还是看代码:
SELECT ‘[ ‘+hName+’ ]’ FROM @hobby FOR XML PATH(’’)
没错我们还可以通过符号+号,来对字符串类型字段的输出格式进行定义。结果如下:
[ 爬山 ][ 游泳 ][ 美食 ]
那么其他类型的列怎么自定义? 没关系,我们将它们转换成字符串类型就行啦!例如:

SELECT '{'+STR(hobbyID)+'}','[ '+hName+' ]' FROM @hobby FOR XML PATH('')
SELECT hobby+',' FROM student 
  WHERE sName=A.sName 
  FOR XML PATH('')

查询的hobby用逗号连接,吧表情换成空字符

12.LEFT(ARG,LENGTH)、RIGHT(ARG,LENGTH)

LEFT、RIGHT函数返回ARG最左边、右边的LENGTH个字符串,ARG可以是CHAR或BINARY STRING。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值