主导提醒:时常能够高出这种景况:用不一致的SQL写法能够达标相像的目标

0907vip 10907vip 2代码

sqlserver字符串拆分(split卡塔尔国方法汇总

 转载

–方法0:动态SQL法 declare @s varchar(100),@sql varchar(1000)
set @s=’1,2,3,4,5,6,7,8,9,10′
set @sql=’select col=”’+ replace(@s,’,’,”’ union all select
”’)+””
PRINT @sql
exec (@sql)

 

if exists (select * from dbo.sysobjects where id =
object_id(N'[dbo].[f_splitSTR]’) and xtype in (N’FN’, N’IF’,
N’TF’))
drop function [dbo].[f_splitSTR]
GO
–方法1:循环截取法 CREATE FUNCTION f_splitSTR(
@s   varchar(8000State of Qatar,   –待分拆的字符串
@split varchar(10卡塔尔(قطر‎     –数据分隔符
)RETURNS @re TABLE(col varchar(100))
AS
BEGIN
 DECLARE @splitlen int
 SET @splitlen=LEN(@split+’a’)-2
 WHILE CHARINDEX(@split,@s)>0
 BEGIN
  INSERT @re VALUES(LEFT(@s,CHARINDEX(@split,@s)-1))
  SET @s=STUFF(@s,1,CHARINDEX(@split,@s)+@splitlen,”)
 END
 INSERT @re VALUES(@s)
 RETURN
END
GO

 

if exists (select * from dbo.sysobjects where id =
object_id(N'[dbo].[f_splitSTR]’) and xtype in (N’FN’, N’IF’,
N’TF’))
drop function [dbo].[f_splitSTR]
GO
–方法2:使用暂行分拆扶助表法
CREATE FUNCTION f_splitSTR(
@s   varchar(8000卡塔尔(قطر‎,  –待分拆的字符串
@split varchar(10卡塔尔国     –数据分隔符
)RETURNS @re TABLE(col varchar(100))
AS
BEGIN
 –成立分拆管理的协助表(顾客定义函数中必须要操作表变量卡塔尔国
 DECLARE @t TABLE(ID int IDENTITY,b bit)
 INSERT @t(b) SELECT TOP 8000 0 FROM syscolumns a,syscolumns b

 INSERT @re SELECT SUBSTRING(@s,ID,CHARINDEX(@split,@s+@split,ID)-ID)
 FROM @t
 WHERE ID<=LEN(@s+’a’)
  AND CHARINDEX(@split,@split+@s,ID)=ID
 RETURN
END
GO

 

if exists (select * from dbo.sysobjects where id =
object_id(N'[dbo].[f_splitSTR]’) and xtype in (N’FN’, N’IF’,
N’TF’))
drop function [dbo].[f_splitSTR]
GO
if exists (select * from dbo.sysobjects where id =
object_id(N'[dbo].[tb_splitSTR]’) and
objectproperty(id,N’IsUserTable’)=1)
drop table [dbo].[tb_splitSTR]
GO
–方法3:使用永世性分拆协助表法 –字符串分拆扶植表
SELECT TOP 8000 ID=IDENTITY(int,1,1) INTO dbo.tb_splitSTR
FROM syscolumns a,syscolumns b
GO
–字符串分拆管理函数
CREATE FUNCTION f_splitSTR(
@s     varchar(8000卡塔尔(قطر‎,  –待分拆的字符串
@split  varchar(10State of Qatar     –数据分隔符
)RETURNS TABLE
AS
RETURN(
 SELECT col=CAST(SUBSTRING(@s,ID,CHARINDEX(@split,@s+@split,ID)-ID) as
varchar(100))
 FROM tb_splitSTR
 WHERE ID<=LEN(@s+’a’)
  AND CHARINDEX(@split,@split+@s,ID)=ID)
GO

 

–方法4:利用sql server2005的OUTER APPLY

CREATE FUNCTION [dbo].[ufn_SplitStringToTable]
(
  @str VARCHAR(MAX) ,
  @split VARCHAR(10)
)
RETURNS TABLE
    AS
RETURN
    ( SELECT    B.id
      FROM      ( SELECT    [value] = CONVERT(XML , ‘<v>’ +
REPLACE(@str , @split , ‘</v><v>’)
                            + ‘</v>’)
                ) A
      OUTER APPLY ( SELECT  id = N.v.value(‘.’ , ‘varchar(100)’)
                    FROM    A.[value].nodes(‘/v’) N ( v )
                  ) B
    )

 

备注表达:

措施4一定要在sql server二零零六下才足以运转

Mysql数据库笔记,mysql数据库

差之毫厘记录:
1、mysql服务运转不了,进程意外终止 1067
   错误展现:can not connect to mysql server on local hosts(1061卡塔尔(قطر‎
   消除方式:原本是本人傻逼把原本的MySQL数据库给删掉了

2、服务一度起步,可是输入密码时 进不去
乖谬突显:ECR-VRO锐界 1045 <28000>:Access denied for user’root’@’locahost'<using password:YES>
焚薮而田措施:

3、

暗中认可端口号:3306

把mysql的bin目录增多到情形变量中就足以在随机目录下都能够张开bin目录了。

事情未发生前看来的[email protected]这么些是因为人家改了提醒符:
mysql>prompt \[email protected] \h \d>
\u表示近些日子客户 \h表示服务器名称 \d表示最近数据库

MySQL语句规范:

要害字和函数名称全体大写;
数据库名称、表的名号、字段的名号全部大写;
SQL语句必得以分好结尾。

加中括号表示能够省略  
展现当前版本;
mysql>SELECT VERSION();
展现当前时刻;
mysql>SELECT NOW();
彰显当前顾客;
mysql>SELECT USER();

修正原始密码:

开辟命令提醒符分界面, 执行命令: mysqladmin -u root -p password 新密码
实践后提示输入旧密码达成密码改进, 当旧密码为空时径直按回车键确认就能够。

开始:

//创立数据库:
MySQL>CREATE DATABASE (IF NOT EXISTSState of Qatar case;
//展现已经存在的数据库;
MySQL>SH0W DATABASES;
//重命名数据库名称
先关闭数据库,然后找到文件夹所在目录,校勘文件夹名称。
//显示某些数据库;
MySQL>SHOW CREATE DATABASE case;

//匡正数据库编码为utf8;
MySQL>ALTER DATABASE case CHATACTER SET=utf8;

//删除数据库:
MySQL>DROP DATABASE case;

改良和删除

改正默许值: ALTE凯雷德 TABLE TB_NAME ALTER 字段名 SET DEFAULT 默认值; ALTER
TABLE TB_NAME ALTER 字段名 DROP DEFAULT ;
改进表名
ALTER TABLE 表名 RENAME TO 新名;
更正字段名
ALTE凯雷德 TABLE 表名 CHANGE 旧字段 新字段 新字段数据类型
改进字段数据类型
ALTELX570 表名 MODIFY 属性名 数据类型
日增字段
ALTER TABLE 表名 ADD 字段1 字段1的条件 [FIRST | AFTER 字段2];
剔除字段
ALTER TABLE 表名 DROP 字段;
改革字段的排列地点:
ALTERubicon TABLE 表名 MODIFY 字段1 字段1数据类型 FILacrosseST|AFTE本田CR-V 字段2;
校勘表的存款和储蓄引擎:
ALTER TABLE 表名 ENGINE=引擎名
增进主键限定: ALTEOdyssey TABLE 表名 ADD PXC90IMARubiconY KEY (外键名卡塔尔国 删除此而外键节制:
ALTE奥迪Q3 TABLE 表名 DROP FOREIGN KEY (外键外号State of Qatar 更正数据表的名号:
ALTER  TABLE table_name RENAME TO new_table_name
剔除记录:
delete from users where id=1;
修改记录:
update 表名 set 字段=新值 where 条件;
update users set id=1 whers sex=1;

表字段的校订:
追加字段
ALTER table tb_name ADD column_name 属性 地点;        
  //扩充叁个字段,默感觉空
alter table user add COLUMN new2 VARCHAPRADO(20卡塔尔国 NOT NULL;  //扩张叁个字段,默许无法为空
剔除字段
alter table user DROP COLUMN new2;                //删除叁个字段

alter table user DROP column1,column2;                        //删除多列

改善三个字段
alter table user MODIFY new1 VARCHAXC60(10卡塔尔国;            //改良一个字段的门类
alter table user CHANGE new1 new4 int;              //修正叁个字段的称谓,那时候早晚要双重钦命该字段的体系

第二章: 1、数据类型: 整型:
TINYINT -2^7->2^7-1
SMALLINT -2^15->2^15-1
MEDIUMINT -2^23->2^23-1
INT -2^31->2^31-1
BIGINT -2^63->2^63-1

浮点型:
FLOAT[(M,D)] m代表总位数,d代表小数点后位数
DOUBLE[(M,D)]

时刻日期型:(掌握卡塔尔(قطر‎
YEAR 1个字节
TIME 3
DATE 3
DATETIME 8
TIMESTAMP 4

字符型:
CHAR(M) 0<=M<=255
VARCHAR(M)
TINYTEXT
TEXT
MEDIUMTEXT
LONGTEXT
ENUM(‘value1,’value2’…)
SET(‘value1′,’value2’,,,)

2、数据表的操作
打开数据库:
USE test(数据库名称)  
创制数据表:
CREATE TABLE (IF NOT EXISTS) table_name<数据表名字>(column_name<依据项目大小鲜明的列名>data_type<数据类型>,..卡塔尔

mysql>USE TEST;
>CREATE TABLE tb1(
>username VARCHAR(20),
>age TINYINT UNSIGNED,<unsigned意思是永不辜负数>
>salary FLOAT(8,2卡塔尔国 UNSIGNED <float(8,2State of Qatar的意思是一齐有8位数,在那之中小数点后有2位卡塔尔(قطر‎>
>);

查阅数据表列表
SHOW TABLES FROM test;

翻开数据表构造
SHOW COLUMNS FROM TB1;

插入记录INSERT
INSERT [INTO] tb1_name [(col_name,,,)] VALUES(val,,,)
INSERT TB1 (username ,salary) VALUES (‘tom’,26,919.3);
插入的也足以是算式譬喻:33-2 可能函数式:MD5(‘342’卡塔尔国
也能够二回插入多条记下,记录间用,分开就能够。

笔录查找SELECT
SELECT * FROM TB1_NAME

3、空值与非空

NULL 字段值可感觉空  NOT NULL 字段幸免为空

始建表,设定有些量空与非空
>CREATE TABLE TB2(
>username VARCHAR(20) NOT NULL,
>age TINYINT UNSIGNED NULL,
>);

>INSERT TB2 VALUES(NULL,20);
<将报错说username不可为空>

4、自动编号(AUTO_INCREMENT)不能用char类型

自行编号,且需与主键组合使用
暗许景况下,起先值为1,每一趟的增量为1;

5、主键约束(P陆风X8IMASportageY KEY卡塔尔国

每张数据表只存在二个主键
主键保险记录的独一性
主键自动为not null

多少个字段联合主键:
PRIMARY KEY(username,age);

>CREATE TABLE TB2(
>id SMALLINT UNSIGNED  PRIMARY KEY AUTO_INCREMENT,

AUTO_INCREMENT(自动递增卡塔尔必需和P帕杰罗IMA大切诺基Y KCR-VY一同利用,而P福睿斯IMARAV4Y KEY则不鲜明要和AUTO_INCREMENT一齐行使

>username VARCHAR(20) NOT NULL,
>);

>SHOW COLUMNS FROM TB3;

6、唯一限定(UNIQUE KEY)

独一约束
唯一节制能够保险记录的独一性
独一约束的字段可以为NULL
每张数据表能够存在三个独一约束
与主键的分别:一张数据表只可以有一个主键,而UNIQUE KEY能够有七个能够NULL
>CREATE TABLE TB4(
>id SMALLINT UNSIGNED AUTO_INCREMENT P奥迪Q3IMAENCOREY KEY,<自动编号字段>
>username VARCHAR(20) NOT NULL UNIQUE KEY,
>age TINYINT UNSIGNED
>);

布置记录:INSERT TB4(username,ageState of Qatar VALUES(‘TOM’,23卡塔尔(قطر‎;
当再一次写入相符的笔录时,将唤起错误,因为username用了unique节制。总之那些约束在数量表里能够有三个。

7、默许节制(DEFAULT卡塔尔(قطر‎

默认值
当插入记录时,若无鲜明为字段赋值,则自动付与暗中认可值。
>CREATE TABLE TB5(
>id SAMLLINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
0907威尼斯网址,>username VARCHAR(20) NOT NULL UNIQUE KEY,
>sex ENUM(‘1′,’2′,’3’) DEFAULT ‘3’
>);

验证:
INSERT TB5(username)VALUES(‘TOM’);
将发掘自动给sex赋值3了。

8、外键约束

要求:
表与表之间的链接
父表和子表必得利用相同的存放引擎(InnoDB卡塔尔,而禁用一时表:
外键列和参照列必得具有相识的数据类型。在这之中数字的长度或是或不是有暗号位必得一致;而字符     的尺寸则能够分裂
外键列和参照列必须创建索引。借使外键列不真实索引的话,MySQL将活动创制索引。

CREATE TABLE provinces(
id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
pname VARCHAR(20) NOT NULL
);
翻开数据表的蒸汽机:show create table provinces;
CREATE TABLE users(
id SMALLINT UNSIGNED PRIMARU KEY AUTO_INCREMENT,
username VARCHAR(10) NOT NULL,
//增多省份的话能够不用增添字段,只要加上关系表省份的数码就能够
pid SMALLINT UNSIGNED, 
FOREIGN KEY(pid)REFERENCES provinces(id)
);

查看索引:SHOW INDEXES FROM provinces\G;
SHOW INDEXES FROM users\G;

外键约束的参数:

CASCADE:从父表删除或更新且活动删除或更新字表中相称的行
SET NULL:从父表删除或更新行,并安装子表中的外键列为NULL,即使选拔该选项,必得确认保障子表列未有一点名NOT NULL
TEST奔驰M级ICT(约束、限定卡塔尔国:圮相对父表的删除或更新操作
NO ACTION:标准的SQL的第一字,在MySQL中REST翼虎ICT相近。

为自动编号的字段赋值

能够书写成default 只怕null
创建表:
CREATE TABLE users(
id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(20) NOT NULL,
password VARCHAR(32) NOT NULL DEFAULT 123,
age TINYINT UNSIGNED NOT NULL,
sex BOOLEAN
);
安排记录:
INSERT users VALUES(NULL,’Jack’,159357,20,1);

9、

0907vip 3

0907vip 4

出错记录:
1、mysql服务运营不了,进度意外终止1067
错误显示:cannotconnecttomysqlserveronlocalhosts(1061卡塔尔解决措施:…

时一时能够赶过这种情景:用差异的SQL写法可以直达同等的目标。爱钻牛角尖的人就想搞驾驭,诚然结果一致,但到底孰优孰劣?上面是小编列出的部分,请兄弟们请教。也请兄弟们将你们蒙受的相近难点一并列出。

SQLServer 中的回车符与换行符
制表符:CHAR(9)  换行符:CHAR(10)  回车符:CHAR(13)
1、将 varchar 值作为标准,查询Where Id in 列表的值 
declare @a varchar ( 100 )
set @a = ‘56,58’   
— 正确的: 
select * from tb where charindex ( ‘,’ + ltrim (id) + ‘,’ , ‘,’ + @a + ‘,’ ) > 0 
— 错误的: 
select * from tb where id in + @a 

(1卡塔尔国一回插入多条数据时:CREATE TABLE tb(ID int, 名称 NVARCHAHaval(30State of Qatar, 备注
NVARCHA奔驰M级(1000卡塔尔国卡塔尔(قطر‎INSERT tbSELECT 1,DDD,1UNIONALLSELECT
1,5100,DUNIONALLSELECT 1,5200,E

2、找寻与某id相近的四条记下
Create table tb(id int ,cName char ( 10 ))
DECLARE @ID INT         
SET @ID = 7 
SELECT * FROM TB A WHERE id in 
( SELECT TOP 4 id FROM TB ORDER BY ABS (id – @id ))
ORDER BY ID 

0907vip,也足以如此:CREATE TABLE tb1(ID int, 名称 NVARCHALAND(30卡塔尔(قطر‎, 备注
NVARCHA纳瓦拉(1000卡塔尔国卡塔尔INSERT TB1 (ID,名称,备注卡塔尔VALUES(1,DDD,1State of QatarINSERT TB1
(ID,名称,备注State of QatarVALUES(1,5100,D卡塔尔(قطر‎INSERT TB1
(ID,名称,备注State of QatarVALUES(1,5200,E卡塔尔(قطر‎_________________________________地点三种办法,哪一种艺术功效高?

3、按名称,规格分组,将单价数据统十分之一一行,并总结数据
Create table [tb] (tName varchar(4), [tSize] varchar (7), [ tPrice ] int , [ tQty ] int )
insert [ tb ] 
select ‘高瓦’ , ‘880*110’  , 22 , 1 union all select ‘高瓦’ , ‘880*110’ , 25 , 1 union all 
select ‘高瓦’ , ‘880*110’ , 22 , 1 union all select ‘高瓦’ , ‘880*120’ , 22 , 1 

(2)赋值时:SELECT @a=NaaSET
@a=Naa_________________________________地点三种办法,哪一种办法功效高?

select   tName, tSize,
  tPrice = stuff (( select ‘,’ + ltrim (tPrice) from tb  
     where tName = t.tName and tSize = t.tSize FOR XML PATH(”)),1,1,”), sum(tQty)
as tQty
from   tb t group by   tName, tSize 
—结果—————————– 
tName   tSize     tPrice     tQty
高瓦    880*110    22,25,22  3
高瓦    880*120    22        1 

(3卡塔尔取前几条数据时set ROWCOUNT 2 select * from tb order by fdselect Top
2 * from tb order by
fd_________________________________下面二种艺术,哪一种格局成效高?

4、依据出华诞期,总括出正确的年龄 
SET @A = ‘2008-08-12’ 
DECLARE @A DATETIME 
SELECT 年龄 = 
case when datediff(day,dateadd(year,datediff(year,@A,getdate()),@A), getdate())>= 0 
      then datediff(year,@A,getdate()) else datediff(YY,@A,getdate())- 1 end 

(4卡塔尔条件剖断时where 0(select count(*) from tb where ……)where
exists(select * from tb where ……)
_________________________________地方三种格局,哪一种方式成效高?

5、寻找某目录列表中具备下级目录,蕴涵自个儿

发表评论

电子邮件地址不会被公开。 必填项已用*标注