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

阅读: 评论:0

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

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

文章目录

  • mysql和sql server常用方法
  • 数据库sql积累
  • 0.触发器
  • 2.sql server
  • 1.增
    • 1插入全部字段
    • 2插入部分数据
  • 2.删
    • 1不带条件删除数据
    • 2带条件删除数据
  • 3.改
    • 1不带条件修改数据
    • 2带条件的修改
  • 4.查
    • 1.普通查询
    • 2.多表连接查询
      • 1.左外连接
      • 2.右外连接
      • 3.完全外连接
      • 4.内连接
    • 3.INSERT INTO SELECT语句与SELECT INTO FROM语句区别
  • 5.聚集函数分组
    • 5.1Mysql
  • 6.分页查询
  • 7.常用函数
      • 1.时间处理类
      • 2.时间转字符串
        • 时间转时间戳
        • 字符串转时间
        • 字符串转时间戳
        • 时间戳转时间
        • 时间戳转字符串
    • 2.数据处理类
      • 1.保留小数
      • 2.数据类型转换
      • 3.控制或其他情况处理类
            • 1.if函数
            • 2.ifNull函数
      • 4.三元运算
    • 2.SqlServer
      • 1.时间处理类
      • 2.数据精度处理类
            • 1.保留小数
            • 2.数据类型转换
      • 3.控制或其他情况处理类
            • 1.空值替换
      • 4.选择CASE的用法和CHECK 约束
            • 1.CASE的用法
      • 5.CHECK 约束
      • 6.sql server字符替换
      • 7.结果集
      • 8.sql的正则
      • 9 字符串截取 SUBSTRING(str,por,len)
      • 10.STUFF函数的用法
        • 1.1官方解释
        • 1.2 语法格式
        • 1.3 参数详解
        • 1.4 STUFF实例
      • 11 FOR XML PATH 函数用法
      • 12.LEFT(ARG,LENGTH)、RIGHT(ARG,LENGTH)

mysql和sql server常用方法

数据库sql积累

0.触发器

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 insertedSELECT @CONTENT = CONTENT FROM insertedSELECT @STANDARD = STANDARD FROM insertedSELECT @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 join 表2
on 连接条件
where 筛选条件
group by 分组字段
having 分组后的筛选
order by 排序的字段】
limit 【offset,】size;offset要显示条目的起始索引(起始索引从0开始)
size 要显示的条目个数

7.常用函数

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.保留小数

SELECT ROUND(100.3465,2),ROUND(100,2),ROUND(0.6,2),ROUND(114.6,-1);结果分别:100.35,100,0.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,100,0.6,110

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

SELECT FORMAT(100.3465,2),FORMAT(100,2),FORMAT(,100.6,2);结果分别:100.35,100.00,100.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,100,100.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

![](.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 值例如:向日期加上2天 select dateadd(month,1,'2004-10-15')  --返回:2004-10-17 00:00:00.000 3. datediff 返回跨两个指定日期的日期和时间边界数。select datediff(day,'2004-09-01','2004-09-18')   --返回:174. datepart 返回代表指定日期的指定日期部分的整数。select DATEPART(month, '2004-10-15')  --返回 105. 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,100,100.4

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

1.空值替换
SELECT COALESCE('',0)    结果0
SELECT COALESCE('    ',0)   结果0
SELECT COALESCE(null,0)    结果0
SELECT COALESCE(123,0)       结果123SELECT 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'其他' ENDSELECT 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 (SELECTISNULL(historyval, 0.0)FROMce_bf_l_energyh_t_2WHEREtagname = '123'
)
BEGIN--如果存在SELECTISNULL(historyval, 0.0)FROMce_bf_l_energyh_t_2WHEREtagname = '123'ENDELSEBEGIN--如果不存在SELECT0.0END

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 简单介绍
**![](.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。

本文发布于:2024-02-02 11:39:07,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170684514843551.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

上一篇:java中Math.format
标签:语法   常用   简单   sql   server
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23