Daily Support
Notepad++
行前行尾添加字符:
- 按Ctrl + H 打开替换窗口
- 查找模式选择正则表达式
- 输入 ^ 行前添加字符串
- 输入 $ 行尾添加字符串
删除包含某字符串的行:
- 按Ctrl + H 打开替换窗口
- 查找模式选择正则表达式
- 查找目标输入
.*DROP.*
,DROP是想替换的关键词 - 全部替换
删除空白行:
- 按Ctrl + H 打开替换窗口
- 查找模式选择正则表达式
- 查找目标输入
^\s
- 全部替换
下划线转驼峰:
- 按Ctrl + H 打开替换窗口
- 查找模式选择正则表达式
- 查找目标输入
_([a-z])
- 替换为
\U\1\E
- 全部替换
SQL
操作前的判断
1 | #创建表前的判断 |
索引的操作
1 | # 删除主键 |
列的操作
1 | # 重命名列名,索引中的列名会自动更改 |
获取下一个sequence
1 | #sql server |
查看表锁级别
select lockscheme('db_test..table_name')
查包含某字符串的存储过程
select distinct object_name(id) from syscomments where id in(select id from sysobjects where type ='P') and text like '%find_string%'
查看不包含数字
select * from customer a where PATINDEX('%[0-9]%', a.name) = 0
查询SQL执行时CPU的占用情况
1 | WITH AggregatedCPU AS (SELECT q.query_hash, SUM(count_executions * avg_cpu_time / 1000.0) AS total_cpu_millisec, SUM(count_executions * avg_cpu_time / 1000.0)/ SUM(count_executions) AS avg_cpu_millisec, MAX(rs.max_cpu_time / 1000.00) AS max_cpu_millisec, MIN(rs.min_cpu_time / 1000.00) AS min_cpu_millisec,MAX(max_logical_io_reads) max_logical_reads, COUNT(DISTINCT p.plan_id) AS number_of_distinct_plans, COUNT(DISTINCT p.query_id) AS number_of_distinct_query_ids, SUM(CASE WHEN rs.execution_type_desc='Aborted' THEN count_executions ELSE 0 END) AS Aborted_Execution_Count, SUM(CASE WHEN rs.execution_type_desc='Regular' THEN count_executions ELSE 0 END) AS Regular_Execution_Count, SUM(CASE WHEN rs.execution_type_desc='Exception' THEN count_executions ELSE 0 END) AS Exception_Execution_Count, SUM(count_executions) AS total_executions, MIN(qt.query_sql_text) AS sampled_query_text |
触发器记录数据的IUD操作
1 | #创建日志表 |
查看数据库指定schema下所有表是否有主键约束和唯一索引(SQL Server)
1 | SELECT s.name + '.' + t.name AS table_name, |
ISNULL与NULLIF函数区别(SQL Server)
ISNULL(check_expression, replacement_value)
- 如果 check_expression 为 NULL,则返回 replacement_value
- 如果 check_expression 不为 NULL,则返回 check_expression
NULLIF(expression, expression)
- 如果两个 expression 相等,则返回 NULL,该 NULL 为第一个 expression 的数据类型
- 如果两个 expression 不相等,则返回第一个 expression
存储过程的两个参数(QUOTED_IDENTIFIER 和 ANSI_NULLS)
QUOTED_IDENTIFIER
- SET QUOTED_IDENTIFIER ON:与系统关键字重复的,允许使用双引号括起来,就能正常使用。注意是双引号
- SET QUOTED_IDENTIFIER OFF:与系统关键字重复的,不允许使用
ANSI_NULLS
- SET ANSI_NULLS ON:只能使用IS NULL来判断值是否为NULL,而不能使用=或<>来与NULL做比较,任何值包括NULL值与NULL值做=或<>运算都得到FALSE
- SET ANSI_NULLS OFF:可以使用=和<>来与NULL做BOOL运算
Excel
Excel中$是什么意思,$在Excel中是对数据区域的绝对引用,表示固定单元格中的行列,没有$则表示相对引用
跨sheet操作只需要光标在参数前,点击对应sheet tab就行,同个参数只需要一次这样的操作
生成SQL:
- 这一列的文本类型选
general
- 公式文本框输入
="'"&A1&"',"
快速填充整列:
- 左上角输入 D2:D414716,按住ctrl+enter,光标移到公式后,继续按住ctrl+enter
判断两列内容是否相同:
- 这一列的文本类型选
general
=IF((A1=B1),TRUE,FALSE)
判断C列中的内容有没有在B列中出现过:
- 这一列的文本类型选
general
=COUNTIF(B:B,C2)
- 指定范围并且跨sheet判断则是:
=COUNTIF(Sheet1!$B$1:Sheet1!$B$7,C1)
- 结果为0的,就是B列中没有出现过的,而结果不为0,则是在B列中出现过
快速生成字母开头的连续序号:
- 这一列的文本类型选
general
="T"&TEXT(0+ROW(A1),"0000")
- 第一行就是T0001,下一行就是T0002
快速生成sql的in条件(2000个参数):
- 这一列的文本类型选
general
=IF(EXACT(MOD(ROW()-2,2000),0),=TEXTJOIN("' ,' ",TRUE,A2:A2001),"")
- 结果:1’,’2’,’3….’,’2000
快速根据key获取key所在行的所有数据:
- 在sheet2中根据A列的值获取sheet1中A列对应值所在行的所有数据
- 将sheet2的B列的文本类型选
general
=VLOOKUP($A1,Sheet1!$A$2:$AL$1001,COLUMN(Sheet1!B1),0)
- $A1是要基于其返回整行的查找值, Sheet1!$A$2:$AL$1001是要查找的数据范围, COLUMN(Sheet1!B1)表示数据范围内的第二列号,0表示精确查找
- 数据量太大导致卡死,可参考Power Query进行数据合并
单元测试
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Nan!
评论