• SQL Server 常用函数和日期操作


    一、字符转换函数

    1、ASCII()

    返回字符表达式最左端字符的ASCII 码值。

    在ASCII()函数中,纯数字的字符串可不用‘’括起来,但含其它字符的字符串必须用‘’括起来使用,否则会出错。

    print ASCII('123456')    =>    49

    print ASCII(123456)     =>    49

    print ASCII('abc')         =>    97

    2、CHAR()

    将ASCII 码转换为字符。如果没有输入0 ~ 255 之间的ASCII 码值,CHAR() 返回NULL 。

    print CHAR (97)          =>     a

    print ASCII(256)         =>    NULL

    3、LOWER()和UPPER()

    LOWER()将字符串全部转为小写;UPPER()将字符串全部转为大写。

    4、STR()

    把数值型数据转换为字符型数据。

    STR (<float_expression>[,length[, <decimal>]])

    length 指定返回的字符串的长度,decimal 指定返回的小数位数。如果没有指定长度,缺省的length 值为10, decimal 缺省值为0。

    当length 或者decimal 为负值时,返回NULL;

    当length 小于小数点左边(包括符号位)的位数时,返回length 个*;

    先服从length ,再取decimal ;

    当返回的字符串位数小于length ,左边补足空格。

    print STR (2.123456789,6,3)   =>    #2.123  左边补1位空格

    print STR(12,10)     =>    ########12  左边补8位空格

    print STR(1223, 2)  =>   **

    二、去空格函数

    1、LTRIM()

    把字符串头部的空格去掉。

    print LTRIM('  swecde   ')    =>    'swecde   '

    2、RTRIM()

    把字符串尾部的空格去掉。

    print RTRIM ('  swecde   ')   =>    '   swecde'

    三、取子串函数

    1、left()

    LEFT (<character_expression>, <integer_expression>)

    返回character_expression 左起 integer_expression 个字符。

    print LEFT ('acderfv',6)    =>    'acderf'

    2、RIGHT()

    RIGHT (<character_expression>, <integer_expression>)

    返回character_expression 右起 integer_expression 个字符。

    print RIGHT ('acderfv',6)    =>    'cderfv'

    3、SUBSTRING()

    SUBSTRING (<expression>, <starting_ position>, length)

    返回从字符串左边第starting_ position 个字符起length个字符的部分。

    print SUBSTRING  ('acderfv',1,5)   =>    'acder'

    四、字符串比较函数

    1、CHARINDEX()

    返回字符串中某个指定的子串出现的开始位置。

    CHARINDEX (<’substring_expression’>, <expression>)

    其中substring _expression 是所要查找的字符表达式,expression 可为字符串也可为列名表达式。如果没有发现子串,则返回0 值。

    print CHARINDEX ('string', 'substringexpression')  =>  4

    print CHARINDEX ('sring', 'substringexpression')   =>  0

    2、PATINDEX()

    返回字符串中某个指定的子串出现的开始位置。

    PATINDEX (<’%substring _expression%’>, <column_ name>)

    其中子串表达式前后必须有百分号“%”否则返回值为0。

    与CHARINDEX 函数不同的是,PATINDEX函数的子串中可以使用通配符,且此函数可用于CHAR、 VARCHAR 和TEXT 数据类型。

    print PATINDEX ('%string%', 'substringexpression')   =>  4

    print PATINDEX ('%%s%', 'substringexpression')      =>      1

    五、字符串操作函数

    1、QUOTENAME()

    返回被特定字符括起来的字符串。

    QUOTENAME (<’character_expression’>[, quote_ character])

    其中quote_ character 标明括字符串所用的字符,缺省值为“[]”。

    print QuoteName ('abc[ ]def','{')       =>     {abc[ ]def}

    2、REPLICATE()

    返回一个重复character_expression 指定次数的字符串。

    REPLICATE (character_expression integer_expression)

    如果integer_expression 值为负值,则返回NULL 。

    print REPLICATE ('abc',2)     =>   abcabc

    print REPLICATE ('abc',-2)    =>   NULL

    3、REVERSE()

    将指定的字符串的字符排列顺序颠倒。

    REVERSE (<character_expression>)

    其中character_expression 可以是字符串、常数或一个列的值。

    print REVERSE ('abc')     =>     cba

    4、REPLACE()

    返回被替换了指定子串的字符串。

    REPLACE (<string_expression1>, <string_expression2>, <string_expression3>)

    用string_expression3 替换在string_expression1 中的子串string_expression2。

    print REPLACE ('abc_de_fg', '_','-')     =>     abc-de-fg

    4、SPACE()

    返回一个有指定长度的空白字符串。

    SPACE (<integer_expression>)

    如果integer_expression 值为负值,则返回NULL 。

    5、STUFF()

    用另一子串替换字符串指定位置、长度的子串。

    STUFF (<character_expression1>, <start_ position>, <length>,<character_expression2>)

    如果起始位置为负或长度值为负,或者起始位置大于character_expression1 的长度,则返回NULL 值。

    print STUFF ('abcdefg',2,3,'123456')     =>    a123456efg

    六、数据类型转换函数

    1、CAST()

    CAST (<expression> AS <data_ type>[ length ])

    2、CONVERT()

    CONVERT (<data_ type>[ length ], <expression> [, style])

    1)data_type为SQL Server系统定义的数据类型,用户自定义的数据类型不能在此使用。

    2)length用于指定数据的长度,缺省值为30。

    3)把CHAR或VARCHAR类型转换为诸如INT或SAMLLINT这样的INTEGER类型、结果必须是带正号或负号的数值。

    4)TEXT类型到CHAR或VARCHAR类型转换最多为8000个字符,即CHAR或VARCHAR数据类型是最大长度。

    5)IMAGE类型存储的数据转换到BINARY或VARBINARY类型,最多为8000个字符。

    6)把整数值转换为MONEY或SMALLMONEY类型,按定义的国家的货币单位来处理,如人民币、美元、英镑等。

    7)BIT类型的转换把非零值转换为1,并仍以BIT类型存储。

    8)试图转换到不同长度的数据类型,会截短转换值并在转换值后显示“+”,以标识发生了这种截断。

    9)用CONVERT() 函数的style. 选项能以不同的格式显示日期和时间。style. 是将DATATIME 和SMALLDATETIME 数据转换为字符串时所选用的由SQL Server 系统提供的转换样式编号,不同的样式编号有不同的输出格式。

    Select CONVERT(varchar(100), GETDATE(), 0)       : Jul 12 2016 11:52PM

    Select CONVERT(varchar(100), GETDATE(), 1)       : 07/12/16

    Select CONVERT(varchar(100), GETDATE(), 2)       : 16.07.12

    Select CONVERT(varchar(100), GETDATE(), 3)       : 12/07/16

    Select CONVERT(varchar(100), GETDATE(), 4)       : 12.07.16

    Select CONVERT(varchar(100), GETDATE(), 5)       : 12-07-16

    Select CONVERT(varchar(100), GETDATE(), 6)       : 12 Jul 16

    Select CONVERT(varchar(100), GETDATE(), 7)       : Jul 12, 16

    Select CONVERT(varchar(100), GETDATE(), 8)       : 23:57:33

    Select CONVERT(varchar(100), GETDATE(), 9)       : Jul 12 2016 11:57:46:340PM

    Select CONVERT(varchar(100), GETDATE(), 10)     : 07-12-16

    Select CONVERT(varchar(100), GETDATE(), 11)     : 16/07/12

    Select CONVERT(varchar(100), GETDATE(), 12)     : 160712

    Select CONVERT(varchar(100), GETDATE(), 13)     : 12 Jul 2016 23:58:41:807

    Select CONVERT(varchar(100), GETDATE(), 14)     : 23:58:53:723

    Select CONVERT(varchar(100), GETDATE(), 20)     : 2016-07-12 23:59:07

    Select CONVERT(varchar(100), GETDATE(), 21)     : 2016-07-12 23:59:22.840

    Select CONVERT(varchar(100), GETDATE(), 22)     : 07/12/16 11:59:34 PM

    Select CONVERT(varchar(100), GETDATE(), 23)     : 2016-07-12

    Select CONVERT(varchar(100), GETDATE(), 24)     : 00:00:12

    Select CONVERT(varchar(100), GETDATE(), 25)     : 2016-07-13 00:00:25.947

    Select CONVERT(varchar(100), GETDATE(), 100)   : Jul 13 2016 12:00AM

    Select CONVERT(varchar(100), GETDATE(), 101)   : 07/13/2016

    Select CONVERT(varchar(100), GETDATE(), 102)   : 2016.07.13

    Select CONVERT(varchar(100), GETDATE(), 103)   : 13/07/2016

    Select CONVERT(varchar(100), GETDATE(), 104)   : 13.07.2016

    Select CONVERT(varchar(100), GETDATE(), 105)   : 13-07-2016

    Select CONVERT(varchar(100), GETDATE(), 106)   : 13 Jul 2016

    Select CONVERT(varchar(100), GETDATE(), 107)   : Jul 13, 2016

    Select CONVERT(varchar(100), GETDATE(), 108)   : 00:02:21

    Select CONVERT(varchar(100), GETDATE(), 109)   : Jul 13 2016 12:02:33:847AM

    Select CONVERT(varchar(100), GETDATE(), 110)   : 07-13-2016

    Select CONVERT(varchar(100), GETDATE(), 111)   : 2016/07/13

    Select CONVERT(varchar(100), GETDATE(), 112)   : 20160713

    Select CONVERT(varchar(100), GETDATE(), 113)   : 13 Jul 2016 00:03:22:377

    Select CONVERT(varchar(100), GETDATE(), 114)   : 00:03:34:893

    Select CONVERT(varchar(100), GETDATE(), 120)   : 2016-07-13 00:03:48

    Select CONVERT(varchar(100), GETDATE(), 121)   : 2016-07-13 00:04:00.577

    Select CONVERT(varchar(100), GETDATE(), 126)   : 2016-07-13T00:04:13.263

    Select CONVERT(varchar(100), GETDATE(), 130)   :  8 ???? 1437 12:04:34:490AM

    Select CONVERT(varchar(100), GETDATE(), 131)   :  8/10/1437 12:04:53:410AM

    常用:

    Select CONVERT(varchar(100), GETDATE(), 8)    :  00:05:36

    Select CONVERT(varchar(100), GETDATE(), 24)  :  00:05:55

    Select CONVERT(varchar(100), GETDATE(), 108):  00:06:09

    Select CONVERT(varchar(100), GETDATE(), 12) :   160713

    Select CONVERT(varchar(100), GETDATE(), 23) :   2016-07-13

    七、日期函数

    1、day(date_expression)

    返回date_expression中的日期值

    2、month(date_expression)

    返回date_expression中的月份值

    3、year(date_expression)

    返回date_expression中的年份值

    4、DATEADD()

    DATEADD (<datepart>, <number>, <date>)

    返回指定日期date 加上指定的额外日期间隔number 产生的新日期。

    5、DATEDIFF()

    DATEDIFF (<datepart>, <date1>, <date2>)

    返回两个指定日期在datepart 方面的不同之处,即date2 超过date1的差距值,其结果值是一个带有正负号的整数值。

    6、DATENAME()

    DATENAME (<datepart>, <date>)

    以字符串的形式返回日期的指定部分此部分。由datepart 来指定。

    7、DATEPART()

    DATEPART (<datepart>, <date>)

    以整数值的形式返回日期的指定部分。此部分由datepart 来指定。

    DATEPART (dd, date) 等同于DAY (date)

    DATEPART (mm, date) 等同于MONTH (date)

    DATEPART (yy, date) 等同于YEAR (date)

    8、GETDATE()

    以DATETIME 的缺省格式返回系统当前的日期和时间

    SQL Server 日期操作集合 

    DECLARE @dt datetime

    SET @dt=GETDATE()

    1.短日期格式:yyyy-m-d

    SELECT REPLACE(CONVERT(varchar(10),@dt,120),N'-0','-')  =>  2016-07-13

    2.长日期格式:yyyy年mm月dd日

    A. 方法1

    SELECT STUFF(STUFF(CONVERT(char(8),@dt,112),5,0,N'年'),8,0,N'月')+N'日' =>  2016年07月13日

    B. 方法2

    SELECT DATENAME(Year,@dt)+N'年'+DATENAME(Month,@dt)+N'月'+DATENAME(Day,@dt)+N'日'  =>  2016年July月13日

    3.长日期格式:yyyy年m月d日

    SELECT DATENAME(Year,@dt)+N'年'+CAST(DATEPART(Month,@dt) AS varchar)+N'月'+DATENAME(Day,@dt)+N'日'

    => 2016年7月13日

    4.完整日期+时间格式:yyyy-mm-dd hh:mi:ss:mmm

    SELECT CONVERT(char(11),@dt,120)+CONVERT(char(12),@dt,114)  =>  2016-07-13 00:14:58:307

    日期推算处理 

    DECLARE @dt datetime

    SET @dt=GETDATE()

    DECLARE @number int

    SET @number=3

    1.指定日期该年的第一天或最后一天

    A. 年的第一天

    SELECT CONVERT(char(5),@dt,120)+'1-1'  =>  2016-1-1

    B. 年的最后一天

    SELECT CONVERT(char(5),@dt,120)+'12-31' =>  2016-12-31

    2.指定日期所在季度的第一天或最后一天

    A. 季度的第一天

    SELECT CONVERT(datetime,

    CONVERT(char(8),

    DATEADD(Month,

    DATEPART(Quarter,@dt)*3-Month(@dt)-2,

    @dt),

    120)+'1')

    =>  2016-07-01 00:00:00.000

    B. 季度的最后一天(CASE判断法)

    SELECT CONVERT(datetime,

    CONVERT(char(8),

    DATEADD(Month,

    DATEPART(Quarter,@dt)*3-Month(@dt),

    @dt),

    120)

    +CASE WHEN DATEPART(Quarter,@dt) in(1,4)

    THEN '31'ELSE '30' END)

    => 2016-09-30 00:00:00.000

    C. 季度的最后一天(直接推算法)

    SELECT DATEADD(Day,-1,

    CONVERT(char(8),

    DATEADD(Month,

    1+DATEPART(Quarter,@dt)*3-Month(@dt),

    @dt),

    120)+'1')

    => 2016-09-30 00:00:00.000

    3.指定日期所在月份的第一天或最后一天

    A. 月的第一天

    SELECT CONVERT(datetime,CONVERT(char(8),@dt,120)+'1')  =>  2016-07-01 00:00:00.000

    B. 月的最后一天

    SELECT DATEADD(Day,-1,CONVERT(char(8),DATEADD(Month,1,@dt),120)+'1')  => 2016-07-31 00:00:00.000

    4.指定日期所在周的任意一天

    SELECT DATEADD(Day,@number-DATEPART(Weekday,@dt),@dt)  =>  2016-07-12 00:21:11.603

    5.指定日期所在周的任意星期几

    A. 星期天做为一周的第1天

    SELECT DATEADD(Day,@number-(DATEPART(Weekday,@dt)+@@DATEFIRST-1)%7,@dt) => 2016-07-13 00:22:16.300

    B. 星期一做为一周的第1天

    SELECT DATEADD(Day,@number-(DATEPART(Weekday,@dt)+@@DATEFIRST-2)%7-1,@dt) => 2016-07-13 00:22:43.800

  • 相关阅读:
    Mina、Netty、Twisted一起学习(三):TCP前缀固定大小的消息(Header)
    集装箱set相关算法
    企业视觉-大型电商(制)-高性能的用户视觉性能(1)
    周期节
    在近排博客活动已被删除几篇文章
    [Python] Different ways to test multiple flags at once in Python
    [Angular] Use :host-context and the ::ng-deep selector to apply context-based styling
    [Javascirpt AST] Babel Plugin -- create new CallExpression
    [Python] Object spread operator in Python
    [Javascript AST] 3. Continue: Write ESLint rule
  • 原文地址:https://www.cnblogs.com/cicistudy/p/5667055.html
Copyright © 2020-2023  润新知