SQL Server部分函数及语法总结

将最近使用的一些函数及语法,做个总结:

字符串函数
  • LEN(字符串) :获取字符串长度
    栗子:SELECT LEN('12345') ====> 5
  • LEFT(字符串,截取的长度):截取左边字符串
  • RIGHT(字符串,截取的长度):截取右边字符串
    栗子:SELECT RIGHT('12345',2) ====> 45
  • LTRIM(字符串):清空字符串左边空格
  • RTRIM(字符串):清空字符串右边空格
    栗子:SELECT LTRIM(' 12 345') ====> 12 345
  • STUFF(字符串,需替换下标,需长度,替换为的字符串):替换指定范围的字符串
    栗子:SELECT STUFF('12345',2,1,'8') ====> 18345
  • REPLACE(字符串,要替换的字符串,替换为的字符串):替换字符串
    栗子:SELECT REPLACE(' 12345','1','8') ====> 82345
  • UPPER(字符串),LOWER(字符串):大小写转换
  • SUBSTRING(字符串,下标,长度):截取字符串
    栗子:SELECT SUBSTRING('12345',2,2) ====> 23
  • REPLICATE(字符串,重复次数):以指定次数重复字符串
    栗子:SELECT REPLICATE('12345',2) ====> 1234512345
  • REVERSE(字符串):反转字符串
    栗子:REVERSE LTRIM('12345') ====> 54321
类型转换函数
  • CAST(expression AS DateType)
    栗子:CAST(11.11 AS INT) ====> 11
    CAST(666 AS VARCHAR) ====> '666'
  • CONVERT(DateType, expression) 和CAST类似
    栗子:CONVERT(INT, 11.11)====> 11
    CONVERT(VARCHAR, 666)====> '666'
  • CONVERT(DateType, expression, style)
    style:日期格式样式,借以将 DATETIME 或 SMALLDATETIME 数据转换为字符数据;或者字符串格式样式,借以将 FLOAT、REAL、MONEY 或 SMALLMONEY 数据转换为字符数据。
    栗子:CONVERT(NVARCHAR(32),GETDATE(),120)====> '2018-09-12 15:08:07'
    CONVERT(NVARCHAR(32),1234.56,1)====> '1,234.56'

CASE语法

  1. CASE WHEN exp1 THEN result1 WHEN exp2 THEN result2 ELSE result3 END
  2. CASE exp WHEN value1 THEN result1 WHEN value2 THEN result2 ELSE result3 END
操作符IN EXISES
  • 如果子查询得出的结果集记录较少,主查询中的表较大且又有索引时应该用IN
  • 如果外层的主查询记录较少,子查询中的表大,又有索引时使用EXISTS
  • 如果查询语句使用了NOT IN,那么对内外表都进行全表扫描,没有用到索引;而NOT EXISTS的子查询依然能用到表上的索引。所以无论哪个表大,用NOT EXISTS都比NOT IN要快。
分页语法
  • TOP
    SELECT TOP(66) * FROM Table
  • ROW_NUMBER()
    SELECT * FROM (SELECT ROW_NUMBER OVER (ORDER BY xxx) AS ROW, * FROM Table) AS T WHERE T.ROW BETWEEN 1 AND 66
  • OFFSET xxx ROWS FETCH NEXT yyy ROWS ONLY
    SELECT * FROM Table OFFSET 1 ROWS FETCH NEXT 66 ROWS ONLY
  • LIMIT
    SELECT * FROM Table LIMIT 1,66
复制表数据到另一个表
  1. INSERT INTO SELECT语句:将表的数据插入到目标表,要求目标表是存在的。
    在举栗子前,先创建测试数据:
DECLARE @TableA TABLE(
            A VARCHAR(10),
            B VARCHAR(10),
            C VARCHAR(10)
            )
DECLARE @TableB TABLE(
            B VARCHAR(10),
            C VARCHAR(10),
            D VARCHAR(10)
            )
INSERT INTO @TableA VALUES('a1','b1','c1')
INSERT INTO @TableA VALUES('a2','b2','c2')
INSERT INTO @TableA VALUES('a3','b3','c3')

栗子:

  • 将@TableA表中的个别字段插入到目标表TableB中:
INSERT INTO @TableB(B,C) SELECT TA.A,TA.B FROM @TableA TA
SELECT * FROM @TableB

结果:


bc
  • 将@TableA表中的个别字段及常量变量插入到目标表TableB中:
INSERT INTO @TableB SELECT TA.A,TA.B,'d1' FROM @TableA TA
  • 将@TableA表中的所有字段插入到目标表TableB中:
INSERT INTO @TableB SELECT * FROM @TableA
  1. SELECT INTO FROM语句:和INSERT INTO SELECT功能一样但比INSERT INTO SELECT语句性能高,要求目标表是不存在的,执行该语句会创建目标表。批量转移数据至一个新表时,可以先用SELECT INTO,然后创建相关的索引,键,约束等。
    栗子:
  • 将@TableA表中的个别字段插入到目标表TableC
SELECT A,B INTO TableC FROM @TableA
  • 将@TableA表中的所有字段插入到目标表TableC
SELECT * INTO TableC FROM @TableA
  • 根据条件将@TableA表中的数据插入到目标表TableC
SELECT * INTO TABLEC FROM @TableA A WHERE A.A='a1'
  1. UPDATE SET FROM语句:批量更新目标表。
    测试数据:
DECLARE @TableD TABLE(
            D VARCHAR(10),
            E VARCHAR(10),
            F VARCHAR(10)
            )
INSERT INTO @TableD VALUES('a1','e1','f1')
INSERT INTO @TableD VALUES('d2','e2','f2')
INSERT INTO @TableD VALUES('d3','e3','f3')

栗子:

UPDATE @TableD SET D=TA.A,E=TA.B,F=TA.C FROM @TableA TA,@TableD TD WHERE TD.D=TA.A

结果:


update
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,884评论 6 513
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,212评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 167,351评论 0 360
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,412评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,438评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,127评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,714评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,636评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,173评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,264评论 3 339
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,402评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,073评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,763评论 3 332
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,253评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,382评论 1 271
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,749评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,403评论 2 358

推荐阅读更多精彩内容