SQL笔记

SQL优化

2022-12-31转换成20221231

CONVERT这个函数先将字符串转成时间,再讲时间转换成字符串
select CONVERT(varchar, CONVERT(date, ‘2023-10-19’,23), 112)

时间转年、月、日

SQL从时间字段值中获取年份使用DATENAME()函数。

DATENAME()函数语法:DATENAME(param,date)

date是时间字段名 或一个时间值

param是指定要返回日期部分的参数,包括下面几种:
![在这里插入图片描述](https://img-blog.csdnimg.cn/c7c9cf453c0d47d98004e940efb3b924.png

–获取日期字段的年
select to_char(sysdate,‘yyyy’) as year from dual

或者:(指定日期)

select to_char(to_date(‘2013/08/08’,‘yyyy/mm/dd’),‘yyyy’) as year from dual

–获取日期字段的月
select to_char(sysdate,‘mm’) as month from dual

–获取日期字段的日
select to_char(sysdate,‘dd’) as day from dua

1.避免使用select *

2.union all 代替 union

union all 可以获取所有数据,包括重复数据
union 会排重,其过程需要遍历排序和比较 更耗时、更消耗CPU资源

3.小表驱动大表

在这里插入图片描述

在这里插入图片描述

4.批量操作尽量不要用for循环

在这里插入图片描述

在这里插入图片描述

SQL虚拟表

select * from dual

当前时间

sysdate

下划线转驼峰

在这里插入图片描述

在这里插入图片描述

# 控制台输出sql、下划线转驼峰
mybatis:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
    map-underscore-to-camel-case: true

1. 设置传参、定义局部变量、局部变量赋值


ALTER PROCEDURE [dbo].[test]

@ID VARCHAR(100) --执行存储过程的传参

AS

BEGIN TRY

 

​    declare @COUNTA int; -- 定义全局存储过程参数set @COUNTA = (select COUNT(*) from APP_BATCH_JOB_LOG); -- 给参数赋值

​    

​    if @ID>@COUNTA -- if判断select COUNT(*) as id from APP_BATCH_JOB_LOG;elseselect * from APP_BATCH_JOB_LOG where id = @id;END

2.try catch

begin try

--SQL 

end try 

begin catch 

--sql (处理出错动作)

end catch

时间转换

https://www.cnblogs.com/damugua/p/14681300.html

取正数


SELECT ABS(-**123**); -- 123

 

# SQL拼接
```sql

可以传好几个参数

concat(cast(isnull(b.AVERAGE_RATE,0.0) as numeric(20,2)),'%')as AVERAGE_RATE

 

SELECT concat(code,'-',DESCRIPTION) FROM RP_D_REPORTLINE

取年


SELECT

datepart(yy,DATEADD(YEAR,-1,asof_date)) as lastYear,

datepart(yy,asof_date) as year

from RP_S_ASOFDATE

强转位小数


*Convert**(*decimal*(*18,2*)*,rd.AMOUNT*)* as AMOUNT,

删除表某个字段



   ALTER TABLE FMD_ADB DROP COLUMN ID;


   ALTER TABLE a表 DROP COLUMN  a表的某个字段;

# 添加某个字段
```sql

ALTER TABLE FMD_ADB add COLUMN  ID;

--- 对的

ALTER TABLE 表名 ADD字段名 nvarchar(200)

修改字段长度

alter table Table1 alter column Column1 varchar(10)

两表合并

select count*(***)* from T_FMDDATA_T24 union all
     select count*(***)* from FBNK_LIMIT_T24 union all
     select count*(***)* from T_TRIAL_BALANCE_T24

存储过程执行某个字段里的SQL语句

ALTER PROCEDURE [dbo].[aa]
AS
BEGIN
		create table #tmp(
		number int,
		code int,
		name NVARCHAR(200)
	)

	DECLARE @sqlMain NVARCHAR(4000),@balance_usd INT

       declare my_cursor cursor for
       SELECT code FROM RP_D_DEPARTMENT 
       open my_cursor
			 
			 DECLARE @dept NVARCHAR(50);
			 DECLARE @numb NVARCHAR(50);
 DECLARE @name NVARCHAR(200);
       fetch next from my_cursor into @dept
      
       while @@FETCH_STATUS=0
       begin
	-- routine body goes here, e.g.
	-- SELECT 'Navicat for SQL Server'
	SELECT @sqlMain = REPLACE(concat('set @balance_usd= (',db_dyn_sql,')'),'${department}',@dept )FROM jimu_report_db WHERE jimu_report_id = '707485132628443136' and db_ch_name = 'dca'
	 
	
	execute sp_executesql @sqlMain,N'@balance_usd NUMERIC(38,8) output',@balance_usd OUTPUT
	
	--select  @name = name from  RP_D_DEPARTMENT where cdoe = @dept
	
select @name= name from  RP_D_DEPARTMENT where CODE = @dept
	INSERT INTO #tmp VALUES (@balance_usd,@dept,@name)
	
	
	
	    fetch next from my_cursor into @dept --获取下一条数据并赋值给变量
       end--关闭释放游标
       close my_cursor;
       deallocate my_cursor;
			 
			 select * from  #tmp
END

# 创建索引

1、使用CREATE INDEX创建,语法如下:

CREATE INDEX indexName ON tableName (columnName(length));

2、使用ALTER语句创建,语法如下:

ALTER TABLE tableName ADD INDEX indexName(columnName);

ALTER语句创建索引,下面提供一个设置索引长度的例子:

ALTER TABLE t_user_action_log ADD INDEX ip_address_idx (ip_address(16));

SHOW INDEX FROM t_user_action_log;

3、建表的时候创建索引

CREATE TABLE tableName(  
  id INT NOT NULL,   
  columnName  columnType,
  INDEX [indexName] (columnName(length))  
);

示例:

在这里插入图片描述

X ip_address_idx (ip_address(16));

SHOW INDEX FROM t_user_action_log;

3、建表的时候创建索引


```sql 
CREATE TABLE tableName(  
  id INT NOT NULL,   
  columnName  columnType,
  INDEX [indexName] (columnName(length))  
);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值