添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
才高八斗的豆浆  ·  [RESOLVED] VB6 ...·  2 天前    · 
不开心的拖把  ·  Convert VOB to MP4 ...·  2 天前    · 
活泼的海龟  ·  5 Easy Methods to ...·  2 天前    · 
健壮的番茄  ·  How to Convert DVD to ...·  2 天前    · 
想发财的苹果  ·  Go Websockets ...·  1 月前    · 
怕考试的茶壶  ·  1868221 – Missing ...·  1 月前    · 

注释: 上面的时间部分精确到毫秒。

例子 2

下面的 SQL 创建带有日期时间列 (OrderDate) 的 “Orders” 表:

1
2
3
4
5
6
CREATE TABLE Orders 
(
OrderId int NOT NULL PRIMARY KEY,
ProductName varchar(50) NOT NULL,
OrderDate datetime NOT NULL DEFAULT GETDATE()
)

请注意,OrderDate 把 GETDATE() 规定为默认值。结果是,当您在表中插入新行时,当前日期和时间自动插入列中。

现在,我们希望在 “Orders” 表中插入一条记录:

1
INSERT INTO Orders (ProductName) VALUES ('Computer')

“Orders” 表将成为这样:

OrderId ProductName OrderDate ‘Computer’ 2008-12-29 16:25:46.635

DATEPART() 函数

定义和用法

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

语法

1
DATEPART(datepart,date)

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

datepart yy, yyyy qq, q mm, m dy, y dd, d wk, ww dw, w mi, n ss, s

实例

假设我们有下面这个 “Orders” 表:

OrderId ProductName OrderDate ‘Computer’ 2008-12-29 16:25:46.635

我们使用如下 SELECT 语句:

1
2
3
4
5
SELECT DATEPART(yyyy,OrderDate) AS OrderYear,
DATEPART(mm,OrderDate) AS OrderMonth,
DATEPART(dd,OrderDate) AS OrderDay
FROM Orders
WHERE OrderId=1
OrderYear OrderMonth OrderDay

DATEADD() 函数

定义和用法

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

语法

1
DATEADD(datepart,number,date)

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

datepart 参数可以是下列的值:

datepart yy, yyyy qq, q mm, m dy, y dd, d wk, ww dw, w mi, n ss, s

实例

假设我们有下面这个 “Orders” 表:

OrderId ProductName OrderDate ‘Computer’ 2008-12-29 16:25:46.635

现在,我们希望向 “OrderDate” 添加 2 天,这样就可以找到付款日期。

我们使用如下 SELECT 语句:

1
2
SELECT OrderId,DATEADD(day,2,OrderDate) AS OrderPayDate
FROM Orders
OrderId OrderPayDate 2008-12-31 16:25:46.635

DATEDIFF() 函数

定义和用法

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

语法

1
DATEDIFF(datepart,startdate,enddate)

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

datepart 参数可以是下列的值:

datepart yy, yyyy qq, q mm, m dy, y dd, d wk, ww dw, w mi, n ss, s

实例

例子 1

使用如下 SELECT 语句:

1
SELECT DATEDIFF(day,'2008-12-29','2008-12-30') AS DiffDate
DiffDate
例子 2

使用如下 SELECT 语句:

1
SELECT DATEDIFF(day,'2008-12-30','2008-12-29') AS DiffDate
DiffDate

CONVERT() 函数

定义和用法

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

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

语法

1
CONVERT(data_type(length),data_to_be_converted,style)

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

可以使用的 style 值:

SELECT CONVERT(NVARCHAR, GETDATE(), 0) Aug 23 2019 1:39PM SELECT CONVERT(NVARCHAR, GETDATE(), 1) 08/23/19 SELECT CONVERT(NVARCHAR, GETDATE(), 2) 19.08.23 SELECT CONVERT(NVARCHAR, GETDATE(), 3) 23/08/19 SELECT CONVERT(NVARCHAR, GETDATE(), 4) 23.08.19 SELECT CONVERT(NVARCHAR, GETDATE(), 5) 23-08-19 SELECT CONVERT(NVARCHAR, GETDATE(), 6) 23 Aug 19 SELECT CONVERT(NVARCHAR, GETDATE(), 7) Aug 23, 19 8、24 或 108 SELECT CONVERT(NVARCHAR, GETDATE(), 8) 13:39:17 9 或 109 SELECT CONVERT(NVARCHAR, GETDATE(), 9) Aug 23 2019 1:39:17:090PM SELECT CONVERT(NVARCHAR, GETDATE(), 10) 08-23-19 SELECT CONVERT(NVARCHAR, GETDATE(), 11) 19/08/23 SELECT CONVERT(NVARCHAR, GETDATE(), 12) 190823 13 或 113 SELECT CONVERT(NVARCHAR, GETDATE(), 13) 23 Aug 2019 13:39:17:090 14 或 114 SELECT CONVERT(NVARCHAR, GETDATE(), 14) 13:39:17:090 20 或 120 SELECT CONVERT(NVARCHAR, GETDATE(), 20) 2019-08-23 13:39:17 21、25 或 121 SELECT CONVERT(NVARCHAR, GETDATE(), 21) 2019-08-23 13:39:17.090 SELECT CONVERT(NVARCHAR, GETDATE(), 22) 08/23/19 1:39:17 PM SELECT CONVERT(NVARCHAR, GETDATE(), 23) 2019-08-23 SELECT CONVERT(NVARCHAR, GETDATE(), 101) 08/23/2019 SELECT CONVERT(NVARCHAR, GETDATE(), 102) 2019.08.23 SELECT CONVERT(NVARCHAR, GETDATE(), 103) 23/08/2019 SELECT CONVERT(NVARCHAR, GETDATE(), 104) 23.08.2019 SELECT CONVERT(NVARCHAR, GETDATE(), 105) 23-08-2019 SELECT CONVERT(NVARCHAR, GETDATE(), 106) 23 Aug 2019 SELECT CONVERT(NVARCHAR, GETDATE(), 107) Aug 23, 2019 SELECT CONVERT(NVARCHAR, GETDATE(), 110) 08-23-2019 SELECT CONVERT(NVARCHAR, GETDATE(), 111) 2019/08/23 SELECT CONVERT(NVARCHAR, GETDATE(), 112) 20190823 SELECT CONVERT(NVARCHAR, GETDATE(), 113) 23 Aug 2019 13:39:17.090 SELECT CONVERT(NVARCHAR, GETDATE(), 120) 2019-08-23 13:39:17 SELECT CONVERT(NVARCHAR, GETDATE(), 121) 2019-08-23 13:39:17.090 SELECT CONVERT(NVARCHAR, GETDATE(), 126) 2019-08-23T13:39:17.090 SELECT CONVERT(NVARCHAR, GETDATE(), 127) 2019-08-23T13:39:17.090 SELECT CONVERT(NVARCHAR, GETDATE(), 130) 22 ذو الحجة 1440 1:39:17.090P SELECT CONVERT(NVARCHAR, GETDATE(), 131) 22/12/1440 1:39:17.090PM

实例

下面的脚本使用 CONVERT() 函数来显示不同的格式。我们将使用 GETDATE() 函数来获得当前的日期/时间:

1
2
3
4
CONVERT(VARCHAR(19),GETDATE())
CONVERT(VARCHAR(10),GETDATE(),110)
CONVERT(VARCHAR(11),GETDATE(),106)
CONVERT(VARCHAR(24),GETDATE(),113)

结果类似:

1
2
3
4
Dec 29 2008 11:45 PM
12-29-2008
29 Dec 08
29 Dec 2008 16:25:46.635

SQL Server 使用下列数据类型在数据库中存储日期或日期/时间值:

  • DATE - 格式 YYYY-MM-DD
  • DATETIME - 格式: YYYY-MM-DD HH:MM:SS
  • SMALLDATETIME - 格式: YYYY-MM-DD HH:MM:SS
  • TIMESTAMP - 格式: 唯一的数字
  • 实例

    根据”填报类型”字段的值选择不同的时间字段

    convert(varchar,(CASE new_type WHEN '1' THEN DATEADD(HOUR, 8, new_actualfinishtime) WHEN '2' THEN DATEADD(HOUR, 8, new_submitdate) END),23 )submittime

    1.当new_type 值为1时取时间为 new_actualfinishtime字段的值,当new_type 值为2时取时间为new_submitdate字段的值.

    (CASE new_type WHEN ‘1’ THEN new_actualfinishtime WHEN ‘2’ THEN new_submitdate END) 时间

    2.现在因为数据库中的时间为0时区,所以转换为北京时间要加上8小时,所以为

    (CASE new_type WHEN ‘1’ THEN DATEADD(HOUR, 8, new_actualfinishtime) WHEN ‘2’ THEN DATEADD(HOUR, 8, new_submitdate) END) 时间

    3.然后又需要将时间转换为日期格式,

    加过之后为

    convert(varchar,(CASE new_type WHEN ‘1’ THEN DATEADD(HOUR, 8, new_actualfinishtime) WHEN ‘2’ THEN DATEADD(HOUR, 8, new_submitdate) END),23 ) 时间

    查指定时间范围内的数据

    因为时间在两个字段内,所以可以使用

    (( new_actualfinishtime BETWEEN ‘${START_TIME}’ and’${FINISH_TIME}’) or ( new_submitdate BETWEEN ‘${START_TIME}’ and’${FINISH_TIME}’) )

    其中’${START_TIME}’和’${FINISH_TIME}’为帆软报表内选择的时间,格式为其固定的格式

    但是又想只选年月就查到当月的数据 ,所以使用

    DateDiff (interval,date1,date2)函数

    以interval 指定的方式,返回date2 与date1两个日期之间的差值 date2-date1

    interval 格式使用Year和Month,差值都是0

    (((DateDiff(month,new_actualfinishtime, ‘${START_TIME}’) = 0 ) and (DateDiff(year,new_actualfinishtime, ‘${START_TIME}’ ) = 0))or( (DateDiff(month,new_submitdate, ‘${START_TIME}’) = 0 ) and (DateDiff(year,new_submitdate, ‘${START_TIME}’ ) = 0)))

    同时时间又因为时区问题需要加上8小时,所以再使用

    DateAdd (interval,number,date)函数

    以interval指定的方式,加上number之后的日期

    (((DateDiff(month,DATEADD(HOUR, 8, new_actualfinishtime), ‘${START_TIME}’) = 0 ) and (DateDiff(year,DATEADD(HOUR, 8, new_actualfinishtime), ‘${START_TIME}’ ) = 0))or( (DateDiff(month,DATEADD(HOUR, 8, new_submitdate), ‘${START_TIME}’) = 0 ) and (DateDiff(year,DATEADD(HOUR, 8, new_submitdate), ‘${START_TIME}’ ) = 0)))

    最终的sql

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    SELECT 
    convert(varchar,(CASE new_type WHEN '1' THEN DATEADD(HOUR, 8, new_actualfinishtime) WHEN '2' THEN DATEADD(HOUR, 8, new_submitdate) END),23 )submittime,
    new_ord_sales_idName 业务员,
    (CASE new_type WHEN '1' THEN '客户拜访' WHEN '2' THEN '工作日志' END)填报类型,
    location 工作地点,
    new_jobcontent 工作内容,
    new_account_idName 客户名称,
    new_telphone 客户电话,
    new_entertainfee 招待费,
    new_accommodationfee 住宿费,
    new_trafficfee 交通费,
    new_miscellaneousfee 公杂费,
    new_other 其他费用,
    new_dealers_idName 部门
    FROM
    appointment
    WHERE 1=1
    and new_ord_sales_id='${id}'
    --and(( new_actualfinishtime BETWEEN '${START_TIME}' and'${FINISH_TIME}')
    --or ( new_submitdate BETWEEN '${START_TIME}' and'${FINISH_TIME}') )
    and(((DateDiff(month,DATEADD(HOUR, 8, new_actualfinishtime), '${START_TIME}') = 0 )
    and (DateDiff(year,DATEADD(HOUR, 8, new_actualfinishtime), '${START_TIME}' ) = 0))
    or( (DateDiff(month,DATEADD(HOUR, 8, new_submitdate), '${START_TIME}') = 0 ) and (DateDiff(year,DATEADD(HOUR, 8, new_submitdate), '${START_TIME}' ) = 0)))
    order by submittime

    SQLserver数据库函数参数格式说明

    interval的可选值

    参数/功能 GetDate( ) 返回系统目前的日期与时间 DateDiff (interval,date1,date2) 以interval 指定的方式,返回date2 与date1两个日期之间的差值 date2-date1 DateAdd (interval,number,date) 以interval指定的方式,加上number之后的日期 DatePart (interval,date) 返回日期date中,interval指定部分所对应的整数值 DateName (interval,date) 返回日期date中,interval指定部分所对应的字符串名称 缩 写(Sql Server) Access 和 ASP 年 1753 ~ 9999 Quarter 季 1 ~ 4 Month 月1 ~ 12 Day of year 一年的日数,一年中的第几日 1-366 日,1-31 Weekday 一周的日数,一周中的第几日 1-7 周,一年中的第几周 0 ~ 51 时0 ~ 23 Minute 分钟0 ~ 59 Second 秒 0 ~ 59 Millisecond