https://www.cnblogs.com/accumulater/p/6088980.html--普通SQL语句可以用Exec执行
https://blog.csdn.net/qq_36482772/article/details/77815021--自定义带输入参数的存储过程
默认的SQLServer
''附近有错误,把空格都去了重新空,
一,函数
1,拼接函数
SELECT'123'+'123'AS result1;
使用 cast
select '+' cast(2 as varchar)
第二种方法:
select (stuff((select '+' + nNum from table for xml path ('')),1,1,'')) //nNum是 int类型
使用 RTRIM
select (stuff((select '+' + RTRIM(nNum) from table for xml path ('')),1,1,'')) //nNum是 int类型
MySQL的:
SELECT CONCAT(123,'123')AS result1; ---- 123123
SELECT CONCAT_WS(':','abc','def')AS result1; ------ ABC:DEF
--------------------- --------------------- -------- ------------- ---------------------
根据某字段分组拼接
shop_id fruit_name
1桃子
1梨子
2香蕉
3苹果
2草莓
从shop_id中选择t_fruit group中的shop_id,GROUP_CONCAT(fruit_name);
--------------------- --------------------- -------- ------------- ---------------------
SQLServer的:不同数据类型拼接要处理 - 数字与字符串拼接
从用户中选择'id_'+ convert(varchar(50),id)
2,截取字符串
离开(pid,17)
对(pid,1)
SUBSTRING(pid,1,17)
3,CONVERT()函数是把日期转换为新数据类型的通用函数
把20181108改成 - > 2018-11-08 CONVERT(varchar(10),CONVERT(datetime,zzrq,10),23)
--update xxcw..cbm set zzrq = CONVERT(varchar(10),CONVERT(datetime,zzrq,10),23)
其中bmh(从RES_projects中选择zw_prjcode)和zzrq <>''和zzrq不像'% - %'
如图4所示,不以字母开头的数据
select * from saap_users where user_id like '[^A-Zz-z]%'
5、去左右空格
select ltrim(rtrim(UsrName))
6、exists用法
select * from res_projects a where exists(select rp_code from aky b where a.rp_code = b.部门号) and a.rp_status is null
数据库里面就算有一列数据不相等都不能用exists判断是否存在,select查出相等列来判断exists也不奏效,这种情况要用in
7、in 用法
表1把相等用来判断同一条数据的那几列查出来,作为条件拼接not in表2,表2将这些列拼接
例:select * from (select id, name, pid from table1) a
where (convert(varchar(50), a.id)+ convert(varchar(50), a.name)+ convert(varchar(50), a.pid)) not in
(select (convert(varchar(50), id)+ convert(varchar(50), name)+ convert(varchar(50), pid)) from table2)
8、group by分组,用于去重,查询列要和group by保持一致
9、case when
CASE c.continue_flag WHEN 0 THEN '项目延续' WHEN 1 THEN '新增项目' WHEN 2 THEN '项目延续' ELSE null END as '项目类型'
10、循环语句
declare @i int
set @i=1
while @i<30
begin
insert into test (userid) values(@i)
set @i=@i+1
end
---------------
while 条件
begin
执行操作
set @i=@i+1
end
WHILE
11、左侧自动补零
例如 ‘49999’ 五位 自动补零 ‘0049999’
‘1000000’七位不变 ‘1000000’
请问怎么实现?
--> 查询结果
SELECT
right
(
'000000'
+
cast
(id
as
varchar
),7)
as
id
12、添加自然序号 从1开始递增
a.通过rownum实现即可。
sql:select rownum , * from tablename where 条件语句。
b.Row_Number()over(order by ID)
实例:
insert into
BGT_projects (fp_code,fp_type,fp_name,dpt_code,fp_status,dpt_name)
SELECT
'20191225'+ cast(right('00'+cast(Row_Number()over(order by user_id) as varchar),2) as varchar),1,'部门预算项目(二上)',depart_code,0,depart_name
FROM
SAAP_users
WHERE
SEX = 'D'
13、去空格
select ltrim(' test ') --去除左边的空格
select rtrim(' test ') --去除右边的空格
select ltrim(rtrim(' test ')) --去除首尾空格
14、分页 currentPage 第几页 pageSize 每页数据条数
mysql:limit m,n 【m:开始位置 (不包含当前位置,或者理解为从0开始)---- n:从开始位置开始一共取多少条】
limit (currentPage-1)*pageSize,pageSize
SqlServer: 【@Star:开始位置(不包含当前位置,或者理解为从0开始)----- @End:结束位置(含当前位置)】
DECLARE @Start INT
DECLARE @End INT
SELECT @Start = (currentPage-1)*pageSize,@End = currentPage*pageSize;
WITH EmployeePage AS (SELECT *, ROW_NUMBER() OVER (ORDER BY user_id) AS RowNumber FROM Emp)
SELECT * FROM EmployeePage WHERE RowNumber > @Start AND RowNumber <= @End ORDER BY user_id