sql server(常用)

龚景
• 阅读 1361

普通用法

//生成 uuid 并转为小写
select LOWER(SUBSTRING(uuid,1,8)+'-'+SUBSTRING(uuid,10,4)+'-'+SUBSTRING(uuid,15,4)+'-'+SUBSTRING(uuid,20,4)+'-'+SUBSTRING(uuid,25,12)) 
from (select cast(NEWID() as varchar(36)) as uuid) s  //ea52a7bb-a2aa-44b8-be28-5ebc64defcf9

//获取时分秒
select DateName(hour,GetDate())+ DateName(minute,GetDate())+DateName(second,GetDate()) //143054

//1000-9999随机数
select floor(9000*RAND()+1000)

//日期格式化
select GETDATE()                            //2019-02-12 14:30:16.763
Select CONVERT(varchar(100), GETDATE(), 8)  //10:57:46
Select CONVERT(varchar(100), GETDATE(), 12) //060516
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(), 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(), 102)//2006.05.16
Select CONVERT(varchar(100), GETDATE(), 111)//2006/05/16
Select CONVERT(varchar(100), GETDATE(), 112)//20060516

进阶

order by

group by

我们经常会使用group by对查询的结果进行去重,但是在使用的过程中一定要确保 group by 里面要只是有一个唯一性的条件,否则极有可能把需要的条目去重了,导致查询结果异常,而且这个问题排查难度不小

联表查询

SQL查询多列合并一列

select ID,hosID +'/'+ hosCode +'/'+ name as '诊所编号/诊所Code/医生项目'
from Doctor where hosCode = 'xxxx'
//return: 71bfc474-7725-e8fb-ecbd-a204bbaxxxxx 15xx/A75xxx/宋xx

SQL查询将多行合并成一行(转载)

//将param1中自startIndex(SQL中都是从1开始,而非0)起,删除length个字符,然后用param2替换删掉的字符。
stuff(param1, startIndex, length, param2)

param1:一个字符数据表达式。param1可以是常量、变量,也可以是字符列或二进制数据列。
startIndex:一个整数值,指定删除和插入的开始位置。如果 startIndex或 length 为负,则返回空字符串。如果startIndex比param1长,则返回空字符串。startIndex可以是 bigint 类型。
length:一个整数,指定要删除的字符数。如果 length 比param1长,则最多删除到param1 中的最后一个字符。length 可以是 bigint 类型。

例如:

select STUFF('abcdefg',1,0,'1234')       --结果为'1234abcdefg'
select STUFF('abcdefg',1,1,'1234')       --结果为'1234bcdefg'
select STUFF('abcdefg',2,1,'1234')       --结果为'a1234cdefg'
select STUFF('abcdefg',2,2,'1234')       --结果为'a1234defg'

拓展:for xml path,将查询结果集以XML形式展现

现在想把两条数据通过PerworkSampleInfoId和Barcode合并成一条

select ID,PerworkSampleInfoId,Barcode, ApplyItemId,ApplyItemName,ItemPrice
from Perwork_SampleItem where Barcode = 'A75004xxxxxx'

sql server(常用)

select PerworkSampleInfoId,Barcode,
    (
        select STUFF(
            (select ',' + ApplyItemName from Perwork_SampleItem where Barcode = a.Barcode for xml path('')),
            1,
            1,
            ''        
        )
    ) as ApplyItemNames,
    (
        select STUFF (
            (select sum(ItemPrice) from Perwork_SampleItem where Barcode = a.Barcode),
            1,
            0,
            ''
        )
    )as totalItemPrice
from Perwork_SampleItem a
where Barcode = 'A75004xxxxxx'
group by PerworkSampleInfoId,Barcode

sql server(常用)

视图

存储过程

优点:

   1.存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而一般SQL语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度。

  2.当对数据库进行复杂操作时(如对多个表进行Update,Insert,Query,Delete时),可将此复杂操作用存储过程封装起来与数据库提供的事务处理结合一起使用。

  3.存储过程可以重复使用,可减少数据库开发人员的工作量

  4.安全性高,可设定只有某此用户才具有对指定存储过程的使用权

缺点:

   1.如果更改范围大到需要对输入存储过程的参数进行更改,或者要更改由其返回的数据,则您仍需要更新程序集中的代码以添加参数、更新 GetValue() 调用,等等,这时候估计比较繁琐了。

   2.可移植性差
由于存储过程将应用程序绑定到 SQL Server,因此使用存储过程封装业务逻辑将限制应用程序的可移植性。

基本用法:

//创建存储过程
use WEHealth
go
create procedure pro_test
@_code varchar(50)
as
IF ( @_code IS NOT NULL )
    select *
    from Hospital
    where Code like '%'+@_code+'%';
    
ELSE
    select *
    from Hospital;
//调用存储过程
exec pro_test '101999';
exec pro_test null;

函数

表值函数

标量值函数

点赞
收藏
评论区
推荐文章
美凌格栋栋酱 美凌格栋栋酱
7个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Stella981 Stella981
3年前
SpringBoot学习:整合shiro自动登录功能(rememberMe记住我功能)
首先在shiro配置类中注入rememberMe管理器!复制代码(https://oscimg.oschina.net/oscnet/675f5689159acfa2c39c91f4df40a00ce0f.gif)/cookie对象;rememberMeCookie()方法是设置Cookie的生成模
Wesley13 Wesley13
3年前
VirtualBox导入已安装好的操作系统的方法
VirtualBox导入已安装好的操作系统的方法1、修改UUID进入VirtualBox安装目录,运行VBoxManage修改UUID,命令运行如下:D:\\VirtualBoxVBoxManage.exe internalcommands setvdiuuid E:\\VirtualX
Stella981 Stella981
3年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Easter79 Easter79
3年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Easter79 Easter79
3年前
SpringBoot学习:整合shiro自动登录功能(rememberMe记住我功能)
首先在shiro配置类中注入rememberMe管理器!复制代码(https://oscimg.oschina.net/oscnet/675f5689159acfa2c39c91f4df40a00ce0f.gif)/cookie对象;rememberMeCookie()方法是设置Cookie的生成模
Wesley13 Wesley13
3年前
(绝对有用)iOS获取UUID,并使用keychain存储
UDID被弃用,使用UUID来作为设备的唯一标识。获取到UUID后,如果用NSUserDefaults存储,当程序被卸载后重装时,再获得的UUID和之前就不同了。使用keychain存储可以保证程序卸载重装时,UUID不变。但当刷机或者升级系统后,UUID还是会改变的。但这仍是目前为止最佳的解决办法了,如果有更好的解决办法,欢迎留言。(我整理的解决办法的参
Stella981 Stella981
3年前
Android蓝牙连接汽车OBD设备
//设备连接public class BluetoothConnect implements Runnable {    private static final UUID CONNECT_UUID  UUID.fromString("0000110100001000800000805F9B34FB");
为什么mysql不推荐使用雪花ID作为主键
作者:毛辰飞背景在mysql中设计表的时候,mysql官方推荐不要使用uuid或者不连续不重复的雪花id(long形且唯一),而是推荐连续自增的主键id,官方的推荐是auto_increment,那么为什么不建议采用uuid,使用uuid究
分布式系统的主键生成方案对比 | 京东云技术团队
UUID​UUID(通用唯一识别码)是由32个十六进制数组成的无序字符串,通过一定的算法计算出来。为了保证其唯一性,UUID规范定义了包括网卡MAC地址、时间戳、名字空间(Namespace)、随机或伪随机数、时序等元素,以及从这些元素生成UUID的算法。
龚景
龚景
Lv1
江南好,风景旧曾谙。日出江花红胜火,春来江水绿如蓝
文章
2
粉丝
0
获赞
0