几个有用的SQL函数

1、把一张表中的数据插入另一张表中

insert into  tA (A1,A2) select B1,B2 from tB

2、dateadd

在向指定日期加上一段时间的基础上,返回新的 datetime 值。

语法
DATEADD ( datepart , number, date )

参数
datepart

是规定应向日期的哪一部分返回新值的参数。下表列出了 Microsoft® SQL Server™ 识别的日期部分和缩写。

日期部分 缩写
Year yy, yyyy
quarter qq, q
Month mm, m
dayofyear dy, y
Day dd, d
Week wk, ww
Hour hh
minute mi, n
second ss, s
millisecond ms


number

是用来增加 datepart 的值。如果指定一个不是整数的值,则将废弃此值的小数部分。例如,如果为 datepart 指定 day,为 number 指定 1.75,则 date 将增加 1。

date

是返回 datetime 或 smalldatetime 值或日期格式字符串的表达式。有关指定日期的更多信息,请参见 datetime 和 smalldatetime。

如果您只指定年份的最后两位数字,则小于或等于"两位数年份截止期"配置选项的值的最后两位数字的数字所在世纪与截止年所在世纪相同。大于该选项的值的最后两位数字的数字所在世纪为截止年所在世纪的前一个世纪。例如,如果 two digit year cutoff 为 2049(默认),则 49 被解释为 2049,2050 被解释为 1950。为避免模糊,请使用四位数的年份。

返回类型
返回 datetime,但如果 date 参数是 smalldatetime,返回 smalldatetime。

3、DatePart函数

  返回一个包含已知日期的指定时间部分的 Variant (Integer)。

  语法

  DatePart(interval, date[,firstdayofweek[, firstweekofyear]])

  DatePart 函数语法中有下列命名参数:

  部分 描述

  interval 必要。字符串表达式,是要返回的时间间隔。

  date 必要。要计算的 Variant (Date) 值。

  Firstdayofweek 可选。指定一个星期的第一天的常数。如果未予指定,则以星期日为第一天。

  firstweekofyear 可选。指定一年第一周的常数。如果未予指定,则以包含 1 月 1 日的星期为第一周。

  设置

  interval 参数的设定值如下:

  设置     描述

  yyyy    年
     q         季

     m        月
     y         一年的日数
    d         日
    w         一周的日数
    ww       周
    h         时

    n         分钟
    s         秒

  firstdayofweek 参数的设定值如下:

  常数 值 描述
    vbUseSystem 0 使用 NLS API 设置。
    vbSunday 1 星期日(缺省值)
    vbMonday 2 星期一
    vbTuesday 3 星期二
    vbWednesday 4 星期三
    vbThursday 5 星期四
    vbFriday 6 星期五
    vbSaturday 7 星期六

  firstweekofyear 参数的设定值如下:

  常数 值 描述
     vbUseSystem 0 使用 NLS API 设置。
     vbFirstJan1 1 从包含 1 月 1 日的星期开始(缺省值)。
     vbFirstFourDays 2 从第一个其大半个星期在新的一年的一周开始。
     vbFirstFullWeek 3 从第一个无跨年度的星期开始。

  说明
      DatePart 函数可以用来计算日期并返回指定的时间间隔。例如,可以使用DatePart 计算某个日期是星期几或目前为几点钟。
    firstdayofweek 参数会影响使用时间间隔符号 “W” 或 “WW” 计算的结果。
     如果 date 是日期文字,则指定的年份成为该日期的固定部分。但是,如果 date 用双引号 (" ") 括起来,且年份略而不提,则在每次计算 date 表达式时,当前年份都会插入到代码之中。这样就可以书写适用于不同年份的程序代码。

4、DATENAME

   返回表示指定日期的指定日期部分的字符串。

   DATENAME ( datepart , date )

datepart

指定要返回的日期部分的参数。有关更多信息,请参见本主题后面的“备注”部分。

date

返回 datetime 值(或可以隐式转换为 datetime 值的值)的表达式。date 还可以是日期格式的 Unicode 字符串。对于 1753 年 1 月 1 日以后的日期,使用 datetime 数据类型。对于之前的日期,将存储为字符数据。在输入 datetime 值时,请始终使用单引号将它们括起来。

如果只指定年份的后两位数字,则小于或等于两位截止年份配置选项值的后两位数字的值将与截止年份处于同一世纪中。比此选项值的后两位数字大的值先于截止年份的世纪。例如,如果两位数字的截止年份是 2049(默认值),则“49”将被解释为 2049,而“50”将被解释为 1950。为了避免产生歧义,请使用四位年份。

5、datepart与datename的区别及返回类型
datepart 函数返回 int 型
datename 函数返回 nvarchar 型

6、CHARINDEX
     返回字符串中指定表达式的起始位置。
     语法
    CHARINDEX ( e­xpression1 , e­xpression2 [ , start_location ] )
    参数
    e­xpression1
    一个表达式,其中包含要寻找的字符的次序。e­xpression1 是一个短字符数据类型分类的表达式。
    e­xpression2
    一个表达式,通常是一个用于搜索指定序列的列。e­xpression2 属于字符串数据类型分类。
    start_location
    在 e­xpression2 中搜索 e­xpression1 时的起始字符位置。如果没有给定 start_location,而是一个负数或零,则将从 e­xpression2 的起始位置开始搜索。
   

    返回类型
    int
    注释
    如果 e­xpression1 或 e­xpression2 之一属于 Unicode 数据类型(nvarchar 或 nchar)而另一个不属于,则将另一个转换为 Unicode 数据类型。
     如果 e­xpression1 或 e­xpression2 之一为 NULL 值,则当数据库兼容级别为 70 或更大时,CHARINDEX 返回 NULL 值。当数据库兼容级别为 65 或更小时,CHARINDEX 仅在 e­xpression1 和 e­xpression2 都为 NULL 时返回 NULL 值。
     如果在 e­xpression2 内没有找到 e­xpression1,则 CHARINDEX 返回 0。
7、LEFT ( character_expression , integer_expression )

   从左边第一个字符开始取start_time列的16个字符
LEFT ( character_expression , integer_expression )
character_expression

字符或二进制数据表达式。character_expression 可以是常量、变量或列。character_expression 必须是可以隐式地转换为 varchar 的数据类型。否则,请使用 CAST 函数显式转换 character_expression。

integer_expression

是正整数。如果 integer_expression 为负,则返回空字符串。

8、UPPER (Transact-SQL)

   返回小写字符数据转换为大写的字符表达式

    UPPER ( character_expression )

   character_expression

一个字符数据表达式character_expression 可以是常量、变量,也可以是字符列或二进制数据列。

character_expression 的数据类型必须可隐式转换为 varchar。否则,请使用 CAST 显式转换 character_expression

9、LOWER ( character_expression )

  将大写字符数据转换为小写字符数据后返回字符表达式。

 10、substring

SUBSTRING
返回字符、binary、text 或 image 表达式的一部分。

语法
SUBSTRING ( e­xpression , start , length )

参数
e­xpression
是字符串、二进制字符串、text、image、列或包含列的表达式。不要使用包含聚合函数的表达式。
start
是一个整数,指定子串的开始位置。
length
是一个整数,指定子串的长度(要返回的字符数或字节数)。

For example:
     substr('This is a test', 6, 2)          would return 'is'
     substr('This is a test', 6)              would return 'is a test'
     substr('TechOnTheNet', 1, 4)     would return 'Tech'
     substr('TechOnTheNet', -3, 3)    would return 'Net'
     substr('TechOnTheNet', -6, 3)     would return 'The'
     substr('TechOnTheNet', -8, 2)     would return 'On'

10、having

使用 HAVING 子句选择行
HAVING 子句对 GROUP BY 子句设置条件的方式与 WHERE 子句和 SELECT 语句交互的方式类似。WHERE 子句搜索条件在进行分组操作之前应用;而 HAVING 搜索条件在进行分组操作之后应用。HAVING 语法与 WHERE 语法类似,但 HAVING 可以包含聚合函数。HAVING 子句可以引用选择列表中出现的任意项。

下面的查询得到本年度截止到目前的销售额超过 $40,000 的出版商:
USE pubs
SELECT pub_id, total = SUM(ytd_sales)
FROM titles
GROUP BY pub_id
HAVING SUM(ytd_sales) > 40000

下面是结果集:
pub_id total
------ -----------
0877 44219

理解应用 WHERE、GROUP BY 和 HAVING 子句的正确序列对编写高效的查询代码会有所帮助:

  WHERE 子句用来筛选 FROM 子句中指定的操作所产生的行。

  GROUP BY 子句用来分组 WHERE 子句的输出。

  HAVING 子句用来从分组的结果中筛选行。

  对于可以在分组操作之前或之后应用的搜索条件,在 WHERE 子句中指定它们更有效。这样可以减少必须分组的行数。应当在 HAVING 子句中指定的搜索条件只是那些必须在执行分组操作之后应用的搜索条件。

posted on 2009-03-12 16:56  liuhaitao  阅读(868)  评论(0编辑  收藏  举报

导航