sql DATEPART() MONTH() convert() cast() dateadd() DATEDIFF() with(nolock)

DATEPART() 函数用于返回日期/时间的单独部分,比如年、月、日、小时、分钟等等。

语法

DATEPART(datepart,date)

date 参数是合法的日期表达式。datepart 参数可以是下列的值:

yy, yyyy.....

MONTH (Transact-SQL) 返回表示指定日期的“月”部分的整数。

参数
 
 

date

表达式,用于返回 datetime 或 smalldatetime 值,或日期格式的字符串。仅对 1753 年 1 月 1 日后的日期使用 datetime 数据类型。

int

备注
 
 

MONTH 等价于 DATEPART(mm, date)。

请始终将 datetime 值包含在引号中。对于早期日期,可将日期存储为字符数据。

 

 

 

cast()

CAST函数用于将某种数据类型的表达式显式转换为另一种数据类型。CAST()函数的参数是一个表达式,它包括用AS关键字分隔的源值和目标数据类型。

CAST (expression AS data_type)

参数说明:


expression:任何有效的SQServer表达式。


AS:用于分隔两个参数,在AS之前的是要处理的数据,在AS之后是要转换的数据类型。


data_type:目标系统所提供的数据类型,包括bigint和sql_variant,不能使用用户定义的数据类型。

http://www.studyofnet.com/news/109.html

使用CAST函数进行数据类型转换时,在下列情况下能够被接受:


(1)两个表达式的数据类型完全相同。
(2)两个表达式可隐性转换。
(3)必须显式转换数据类型。

.CAST()函数的参数是一个表达式,它包括用AS关键字分隔的源值和目标数据类型。以下例子用于将文本字符串'12'转换为整型:

SELECT CAST('12' AS int)

 

 

 

 

 

 convert()  将一种数据类型的表达式转换为另一种数据类型。

CONVERT() 函数是把日期转换为新数据类型的通用函数。

CONVERT() 函数可以用不同的格式显示日期/时间数据。

CONVERT(data_type(length),data_to_be_converted,style)
data_type(length) 规定目标数据类型(带有可选的长度)。data_to_be_converted 含有需要转换的值。style 规定日期/时间的输出格式。

 style 值:

Style IDStyle 格式
100 或者 0 mon dd yyyy hh:miAM (或者 PM)
101 mm/dd/yy
102 yy.mm.dd
103 dd/mm/yy

 

 

 

 

 

 

dateadd()  DATEADD() 函数在日期中添加或减去指定的时间间隔。

DATEADD(datepart,number,date)

date 参数是合法的日期表达式。number 是您希望添加的间隔数;对于未来的时间,此数是正数,对于过去的时间,此数是负数。

datepart 参数可以是下列的值:

datepart缩写
yy, yyyy
季度 qq, q

 

 

 

 

 

 

 

DATEDIFF() 函数返回两个日期之间的时间。

DATEDIFF(datepart,startdate,enddate)

startdate 和 enddate 参数是合法的日期表达式。

datepart 参数可以是下列的值:

datepart缩写
yy, yyyy
季度 qq, q

 

 

 

with as 子查询部分

是用来定义一个SQL片断,该SQL片断会被整个SQL语句所用到。这个语句算是公用表表达式(CTE)

这个语句的意思就是,先执行select * from EvaluateInfo 得到一个结果,将这个结果记录为tablessa  ,在执行select *from tablessa 语句。tablessa 表只是一个别名。

也就是将重复用到的大批量 的SQL语句,放到with  as 中,加一个别名,在后面用到的时候就可以直接用。

对于大批量的SQL数据,起到优化的作用。

 

可以让你做很多事情,定义一个SQL片断,该SQL片断会被整个SQL语句所用到。有的时候,是为了让SQL语句的可读性更高些,也有可能是在UNION ALL的不同部分,作为提供数据的部分。 
特别对于UNION ALL比较有用。因为UNION ALL的每个部分可能相同,但是如果每个部分都去执行一遍的话,则成本太高,所以可以使用WITH AS短语,则只要执行一遍即可。如果WITH AS短语所定义的表名被调用两次以上,则优化器会自动将WITH AS短语所获取的数据放入一个TEMP表里,如果只是被调用一次,则不会。而提示materialize则是强制将WITH AS短语里的数据放入一个全局临时表里。很多查询通过这种方法都可以提高速度。

 

二、with的相关总结(摘录别人博客)
1.使用with子句可以让子查询重用相同的with查询块,通过select调用(with子句只能被select查询块引用),一般在with查询用到多次情况下。在引用的select语句之前定义,同级只能定义with关键字只能使用一次,多个用逗号分割。


2.with子句的返回结果存到用户的临时表空间中,只做一次查询,反复使用,提高效率。


3.在同级select前有多个查询定义的时候,第1个用with,后面的不用with,并且用逗号隔开。


4.最后一个with 子句与下面的查询之间不能有逗号,只通过右括号分割,with 子句的查询必须用括号括起来


5.如果定义了with子句,而在查询中不使用,那么会报ora-32035 错误:未引用在with子句中定义的查询名。(至少一个with查询的name未被引用,解决方法是移除未被引用的with查询),注意:只要后面有引用的就可以,不一定非要在主查询中引用,比如后面的with查询也引用了,也是可以的。


6.前面的with子句定义的查询在后面的with子句中可以使用。但是一个with子句内部不能嵌套with子句。


7.当一个查询块名字和一个表名或其他的对象相同时,解析器从内向外搜索,优先使用子查询块名字。


8.with查询的结果列有别名,引用的时候必须使用别名或*。

with 指定一个临时的命名结果集,称为公用表表达式(CTE)。这是从一个简单的查询派生的,并在一个SELECT,INSERT,UPDATE或DELETE语句的执行范围内定义。该子句也可以在CREATE VIEW语句中用作其定义的SELECT语句的一部分。公共表格表达式可以包含对自身的引用。这被称为递归公用表表达式。

 

posted @ 2018-01-16 18:33  ~雨落忧伤~  阅读(111)  评论(0编辑  收藏  举报