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].
允许根据字符串中某些字符的位置进行截取[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)
搜索和替换:允许根据其值替换某些字符串字符[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]
-- 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