跳转到内容

Microsoft SQL Server/函数

来自维基教科书,自由的教学读物

Min() 和 Max() 函数分别返回一个字段列表中的最小值和最大值。

select min(Date) from Calendar where RDV = 'Important'

修改变量类型

 cast(Champ as decimal(12, 6)) -- otherwise '9' > '10'

在第一个参数中修改变量类型,在第二个参数中修改其长度。

 convert(varchar, Field1, 112)
 convert(datetime, Field2, 112)       -- otherwise impossible to go through the calendar (eg: D + 1)

注意:所有变量类型之间并不兼容[1].

问题示例

 select Date1
 from Table1
 where Date1 between '01/10/2013' and '31/10/2013'

如果没有 convert,日期不会被系统识别。解决方案是将它们存储在 datetime 格式中

 select Date1
 from Table1
 where Date1 between convert(varchar,'20131001',112) and convert(varchar,'20131031',112)

另一方面,如果上面的日期段以斜杠的形式存储在 varchar 中,那么必须将其重新格式化才能进行比较。

有许多日期格式可用[2].

left, right, 和 substring

[编辑 | 编辑源代码]

允许根据字符串中某些字符的位置进行截取[3].

 select substring('13/10/2013 00:09:19', 7, 4) -- returns the hour character after the seventh, so "2013"

例如,在上面的斜杠日期的情况下

 select Date1
 from Table1
 where right(Date1, 4) + substring(Date1, 4, 2) + left(Date1, 2) between convert(varchar,'20131001',112) and convert(varchar,'20131031',112)

replace 和 stuff

[编辑 | 编辑源代码]

搜索和替换:允许根据其值替换某些字符串字符[4].

例如,更新给定的文件夹路径[5] 

update Table1
SET Field1 = replace(Field1,'\Old_path\','\New_path\')
where Field1 like '%\Old_path\%'

如果变量为 null,则返回 true

select Field1 = case when isnull(@Column,'')='' then '*'  else @Column end
from Table1

日期格式

[编辑 | 编辑源代码]

GETDATE 函数用于获取当前日期。要以正确的格式获取另一个日期,需要使用 CONVERT

select convert(smalldatetime, '2016-01-02', 121)

日期截取

[编辑 | 编辑源代码]

DATEPART 函数提取日期的一部分,而无需手动指定其位置[6].

然而,三个函数允许加速这些提取的编写

-- Day
select day(getdate())
-- Month
select month(getdate())
-- Year
select year(getdate())
-- Previous year
select str(year(getdate()) - 1)

日期加减

[编辑 | 编辑源代码]

这里有两个日期操作函数[7]

  • DATEDIFF 计算两个日期之间的间隔[8].
  • DATEADD 返回另一个日期加上一个间隔的结果日期[9].
-- Last day of the previous month
SELECT DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE()),0))
-- Last day of the current month
SELECT DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE())+1,0))
-- Last day of the previous month
SELECT DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE())+2,0))

示例

SELECT DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,'20150101'),0)) as date

给出

date
2014-12-31 23:59:59.000

参考资料

[编辑 | 编辑源代码]
  1. CONVERT 手册
  2. http://stackoverflow.com/questions/74385/how-to-convert-datetime-to-varchar
  3. SUBSTRING 手册
  4. STUFF 手册
  5. REPLACE 手册
  6. DATEPART 手册
  7. http://blog.sqlauthority.com/2007/08/18/sql-server-find-last-day-of-any-month-current-previous-next/
  8. DATEDIFF 手册
  9. DATEADD 手册
华夏公益教科书