精华内容
下载资源
问答
  • datetime2数据类型,类似于之前的datetime类型,不过其精度比较高,可以精确到小数点后面7位(100ns),其使用语法为:datetime2(n)。使用示例: declare @dt as datetime2(5) set @dt = getdate()
     SQL Server 2008 中新的日期时间类型:datetime2和datetimeoffset数据类型。

    datetime2数据类型,
    类似于之前的datetime类型,不过其精度比较高,可以精确到小数点后面7位(100ns),其使用语法为:datetime2(n)。使用示例:

    declare @dt as datetime2(5)
    set @dt = getdate()
    select @dt

    datetimeoffset数据类型,加入了时区偏移量部分,时区偏移量表示为 [+|-] HH:MM。 HH 是范围从 00 到 14 的 2 位数,表示时区偏移量的小时数。 MM 是范围从 00 到 59 的 2 位数,表示时区偏移量的附加分钟数。 时间格式支持到最小 100 毫微秒。 必需的 + 或 - 符号指示在 UTC(通用协调时间或格林尼治标准时间)中是加上还是减去时区偏移量以获取本地时间。使用示例:

    declare @dt as datetimeoffset(8)
    set @dt = '2008-08-08 08:08:08.0 +8:00'
    select @dt

    和CLR数据类型之间的映射关系:

    SQL 数据类型 .NET Framework 类型 System.Data.SqlDbType System.Data.DbType
    date System.DateTime Date Date
    time System.TimeSpan Time Time
    datetime2 System.DateTime DateTime2 DateTime2
    datetimeoffset System.DateTimeOffset DateTimeOffset DateTimeOffset
    datetime System.DateTime DateTime DateTime
    smalldatetime System.DateTime DateTime DateTime
    展开全文
  • 在使用Entity Framework操作数据库时遇到的这个错误。 这个错误比较奇怪,在园子里看到一位兄弟写到有位... sqlServer2008中提供datetime2类型数据(比datetime更精确),而用entity framework4会默认的把C#中的

    在使用Entity Framework操作数据库时遇到的这个错误。
    这个错误比较奇怪,在园子里看到一位兄弟写到有位大哥提出的原因是:http://www.cnblogs.com/plwang1990/articles/2025334.html
      sqlServer2008中提供datetime2类型的数据(比datetime更精确),而用entity framework4会默认的把C#中的
    System.DateTime类转化成sqlServer2008中的datetime2类型,而你的数据库中的元素的属性设的是datetime类型,
    把datetime2转化成datetime系统会认为会丢失数据,所以会报错。(感觉这TM是设计缺陷吧!这是熟么默认设置啊!)
    经过调试发现,这位大哥说的当并不完全正确。SqlServer的datetime有效范围是1753 年 1 月 1 日到 9999 年 12 月 31 日,如果超出这个范围,EF就会把datetime转换为datetime2,也就是会出现上面的错误。

    展开全文
  • 这个错误比较奇怪,在园子里看到一位兄弟写到有位大哥提出的原因是:http://www.cnblogs.com/plwang1990/articles/2025334.html sqlServer2008中提供datetime2类型数据(比datetime更精确),而用entity ...

    在使用Entity Framework操作数据库时遇到的这个错误。

    这个错误比较奇怪,在园子里看到一位兄弟写到有位大哥提出的原因是:http://www.cnblogs.com/plwang1990/articles/2025334.html

      sqlServer2008中提供datetime2类型的数据(比datetime更精确),而用entity framework4会默认的把C#中的
    System.DateTime类转化成sqlServer2008中的datetime2类型,而你的数据库中的元素的属性设的是datetime类型,
    把datetime2转化成datetime系统会认为会丢失数据,所以会报错。(感觉这TM是设计缺陷吧!这是熟么默认设置啊!)

    经过调试发现,这位大哥说的当并不完全正确。SqlServer的datetime有效范围是1753 年 1 月 1 日到 9999 年 12 月 31 日,如果超出这个范围,EF就会把datetime转换为datetime2,也就是会出现上面的错误。

    转载于:https://www.cnblogs.com/ideas/archive/2011/11/29/2267530.html

    展开全文
  • 转--DATETIME数据类型

    2009-11-17 09:04:00
    转自 ...关于字符型和DATETIME类型的转化 由于时间类型的优先级高于字符型,所以当比较一个DATETIME类型数据和一个字符串的时候,字符串首先会转化成DATETIME类型。A 20060102 090807

     

    转自   http://blog.csdn.net/feixianxxx/archive/2009/10/15/4677124.aspx

     

    1.关于字符型和DATETIME类型的转化

        由于时间类型的优先级高于字符型,所以当比较一个DATETIME类型的数据和一个字符串的时候,字符串首先会转化成DATETIME类型。

    A '20060102' '090807' '20090203 12:11:11.111'转化成时间类型的时候

     B '2009-02-03 12:11:11.111'转化成时间类型的时候

    不受会话语言设置影响(SET LANGUAGE) 注意B类型转换的时候不讷讷个省略它的时间部分。


    2.字符型和DATETIME类型转换精度问题

     

    --字符串转化成datetime ,转化后的时间比字符串慢了1毫秒,这是因为自动舍入到最近的百分之三秒
    declare @s varchar(100)
    set @s='2005-09-23 03:23:43:001'
    SELECT CAST(@s AS datetime)
    /*
    -----------------------
    2005-09-23 03:23:43.000
    */
    -------------------------
    --字符串转化成smalldatetime ,转化后的时间比字符串快了大约17秒,这是因为自动舍入到最近的百分之三秒
    declare @s varchar(100)
    set @s='2005-09-23 03:23:43:001'
    SELECT CAST(@s AS Smalldatetime)
    /*
    -----------------------
    2005-09-23 03:24:00
    */

    ------------------

    还要注意 它们之间的转化并不是什么简单的截断数据 有精确到毫秒时候 毫秒部分匹配【0-9】【0-9】【037】

    SQL SERVER 有时候无法精确表示某个时间的瞬间,比如‘20090202 23:59:59.999’,自动舍入为

    ‘20090203 00:00:00.000’

    declare @s table (dates datetime)
    insert @s
    select '20090211 00:00:00.000' union all
    select '20090212 00:00:00.000'

    select * from @s
    where dates between '20090211 00:00:00:000' and '20090211 23:59:59.999' --转化成2009-02-12 00:00:00.000
    /*
    dates
    -----------------------
    2009-02-11 00:00:00.000
    2009-02-12 00:00:00.000
    */

    select * from @s
    where dates >='20090211' and dates< '20090212' --SARG,优化器考虑使用Index Seek


    ---------------
    2009-02-11 00:00:00.000
    */

    select * from @s
    where convert(varchar(8),dates,112)='20090211'
    /*
    Dates
    -----------------------
    2009-02-11 00:00:00.000
    */

    3.Datetime 相关查询问题

    a.生日问题

    这里只考虑特殊问题

    使用DATEADD函数 为某年的2月29日加1年,下年由于不是闰年,所以系统默认是XXXX年2月28日。

    很多人在非闰年庆祝2月29生日 都放在3月1日(书上所说,HOHO)

    例子:我们来求每个员工离今天最近的生日。如果过了生日今天 那么返回明年的生日 否则 返回今年(环境2005)

    SET NOCOUNT ON;
    WITH Args1 AS
    (
      SELECT Name, BirthDate,
        DATEDIFF(year, BirthDate, GETDATE()) AS Diff,--出生日期和今天的相差年份
        CAST(CONVERT(CHAR(8), GETDATE(), 112) AS DATETIME) AS Today --今天的午夜时间
      FROM dbo.Employees
    ),
    Args2 AS
    (
      SELECT Name, BirthDate, Today,
        DATEADD(year, Diff, BirthDate) AS BDCur,--这个是今年的生日

        DATEADD(year, Diff + 1, BirthDate) AS BDNxt--这个是明年的生日
      FROM Args1
    ),
    Args3 AS
    (
      SELECT LastName, FirstName, BirthDate, Today,
        BDCur + CASE WHEN DAY(BirthDate) = 29 AND DAY(BDCur) = 28
          THEN 1 ELSE 0 END AS BDCur,--这里需要判断如果出生的那天是闰年的2月29日,而今年的生日是28日,那么+1天(1号过生日)
        BDNxt + CASE WHEN DAY(BirthDate) = 29 AND DAY(BDNxt) = 28
         THEN 1 ELSE 0 END AS BDNxt ,--这里需要判断如果出生的那天是闰年的2月29日,而明年的生日是28日,那么+1天(1号过生日)
      FROM Args2
    )
    SELECT Name, BirthDate,
      CASE WHEN BDCur >= Today THEN BDCur ELSE BDNxt END AS BirthDay--如果今年的生日还没过(比今天晚),那么就取今年的 反之 取下一年
    FROM Args3;

    b.标识星期数

    大家都知道SQL默认的每个星期第一天是星期日 这样和我们的习惯相违背 这个时候会在做查询的时候非常不方便

    大家可以通过会话的选项 DATEFIRST设置星期的第一天

    我要说的是不依赖这个设置

    有条经典的话:DATEFIRST的设置值和DATEPART函数返回的值存在反比关系。

    什么意思呢?假设DATEFIRST的设置值 为F DATEPART函数返回的星期数 D 如果F增加N 那么D减小N

    如果DATEFIRST 设置为1 今天是星期2 那么 DATEPART 返回2

    如果DATEFIRST 设置为2 (1+1) 今天是星期2 那么 DATEPART 返回1 (2-1)

    给出经典等式:

    DATEPART(DAY,DT+@@DATEFIRST-N)--这里的N为你想星期几为第一条就设置几

    DATEPART(DAY,DT+@@DATEFIRST-1)--大家平时的生活习惯

     

    问题:如果要查某个表里所有星期2的生产数量

    上面的思路做就是:

    select * from tn where DATEPART(DAY,DT+@@DATEFIRST-1)=2

    下面我说一个精巧的思路:

    如果你知道某个具体日期的是星期 比如‘19000102’ (这里写这个原因我想是因为日期够小 方便下面减出来一定是正数)

    select * from tn where datediff(day,'19000102’,DT)%7=0

    这里的'19000102’起到一个参照作用.

     

    c.按周分组

    问题描述:如果让你求每周的订单数量 有人会想到用DATEPART(week,DT)来分组

    这样有一个问题:对于一周跨年的日期,你会得到2个不同的周数

    解决方法:

    由于每周的分组因子是一样的(这里的分组因子我理解是你在一周内用DATEPART(WEEKDAY,DT)发生星期数是唯一的在这周内)

    书上的意思就是 任意一条记录 减去日期的星期数+1 一定是可以返回本周的第一天日期 加上7天-日期的星期数 就是这周的最后一天了

    这样就可以根据一周的第一天和最后一天分组了(相当巧妙我觉得)

    SELECT od - wd + 1 AS week_start, od + 7 - wd AS week_end,
      COUNT(*) AS numorders
    FROM (SELECT OrderID AS oid, OrderDate AS od,
            DATEPART(weekday, OrderDate + @@DATEFIRST - 1) AS wd
          FROM dbo.Orders) AS D
    GROUP BY od - wd + 1, od + 7 - wd;
    GO
    例子可以很好说明问题,不解释了

     

    d.生产日期的方法

    这里首先要提到2个参数临时表的方法

     

    /*
    生产一百万连续数据之临时表
    */
    SET NOCOUNT ON
    CREATE TABLE NUM(N INT PRIMARY KEY)
    INSERT NUM VALUES(1);
    DECLARE @MAX INT,@RC INT
    SET @MAX=1000000
    SET @RC=1
    WHILE @RC*2<=@MAX
    BEGIN
    INSERT NUM
    SELECT N+@RC FROM NUM
    SET @RC=@RC*2
    END
    INSERT NUM
    SELECT N+@RC FROM NUM WHERE N+@RC<=@MAX
    SELECT * FROM NUM
    go
    -----------------
    /*
    函数生产100W连续数据
    */
    create function dbo.fn_nums(@n as bigint )
    returns table
    as

     return
     with
     L0 as (select 1 as c union all select 1),
     L1 as (select 1 as c from L0 AS A,L0 AS B),
     L2 AS (SELECT 1 AS C FROM L1 AS A,L1 AS B),
     L3 AS (SELECT 1 AS C FROM L2 AS A,L2 AS B),
     L4 AS (SELECT 1 AS C FROM L3 AS A,L3 AS B),
     L5 AS (SELECT 1 AS C FROM L4 AS A,L4 AS B),
     NUMS AS (SELECT ROw_number() over (order by c) as n from L5)
     select n from nums where n<=@n

    select * from dbo.fn_nums(1000000)

    然后我们再来写返回2个日期间的日期列表

    DECLARE @s AS DATETIME, @e AS DATETIME;
    SET @s = '20060101';
    SET @e = '20061231';

    SELECT @s + n - 1 AS dt
    FROM dbo.Nums -这里的表就是上面的临时表 你也可以用函数来替代
    WHERE n <= DATEDIFF(day, @s, @e) + 1;

     

    我今天就看了这么多,时间不够

     

    PS:此文章是我看书总结而来 拿出来的目的是大家学习交流用 (部分代码是书上代码)不对的地方大家可以拍砖~

    展开全文
  • SQLServer中Datetime类型数据比较

    千次阅读 2010-01-21 11:14:00
    SQLServer中Datetime类型数据比较2009年02月20日 星期五 16:40 /* 定义开始日期和结束日期*/declare @date_a datetime,@date_b datetimeset @date_a=2009-2-10set @date_b=2009-2-12/* 在日期date_a(包含) 和da
  • SQLServer中Datetime类型数据比较       /* 定义开始日期和结束日期*/ declare @date_a datetime,@date_b datetime set @date_a='2009-2-10' set @date_b='2009-2-12' /* 在...
  • js 比较两个datetime类型数据 function compare(date1,date2) { let dates1 = new Date(date1); let dates2 = new Date(date2); if (dates1 > dates2) { return false } else { return true } } 若...
  • 关于字符型和DATETIME类型的转化  由于时间类型的优先级高于字符型,所以当比较一个DATETIME类型数据和一个字符串的时候,字符串首先会转化成DATETIME类型。 A '20060102' '090807' '20090203 12:11:11...
  •  由于时间类型的优先级高于字符型,所以当比较一个DATETIME类型数据和一个字符串的时候,字符串首先会转化成DATETIME类型。 A '20060102' '090807' '20090203 12:11:11.111'转化成时间类型的时候  B '2009-...
  • 如何比较DateTime类型数据的大小

    万次阅读 2013-09-28 21:39:33
    返回一个值,该值指示两个 DateTime 对象,或者一个 DateTime实例和另一个对象或 DateTime是否具有相同的值。 (MSDN) 下面通过实例代码来对Equals 方法的使用进行说明。   代码片段1 DateTime d1 = ...
  • 【个人学习1之-DATETIME数据类型

    千次阅读 2009-10-15 20:25:00
    1.关于字符型和DATETIME类型的转化 由于时间类型的优先级高于字符型,所以当比较一个DATETIME类型数据和一个字符串的时候,字符串首先会转化成DATETIME类型。A 20060102 090807 20090203 12:11:11.111转化成时间...
  • 看到这个标题,你我可能都笑了。你会笑,因为你以为这个东西太小儿科了,还用得着做... 首先我引入一个问题:如何与一个DateTime类型的字段值进行相等比较?  其实这个问题看起来容易,但有下面的问题存在:  1
  • DateTime类型转换比较

    2008-05-30 13:09:00
    convert (转换类型,字段,格式)比如convert(varchar,time1,112) 把time1(datetime)转换成格式为yyyymmdd.有一个时间2008-05-30 14:12:11 则转换成 20080530。在下表中,左侧的两列表示将 datetime 或 ...
  • C# 使用DateTimePicker与数据库中类型datetime数据比较的一些注意事项 比较的时候可以去除两者之间记录的时间: select += " and convert(varchar(10),UseRecord.borrow_time,20) = '" + dateTimePicker_...
  • sql server 中的 DateTime 数据类型

    千次阅读 2004-07-10 13:30:00
    首先我引入一个问题:如何与一个DateTime类型的字段值进行相等比较?其实这个问题看起来容易,但有下面的问题存在:1、一般来说,用户输入的日期值就是yyyy/mm/dd,不带时、分、秒;2、数据库中存储的日期值是带时...
  • 发现date类型是可以正常匹配的,这是因为如果用datetime类型匹配如果不将日期填写到秒钟mysql将会自动填充剩余的数据为00:00:00,并且只对这个时间进行判断所以datetime=2017-11-01 13:52:26时候用2017-11-01去查询...
  • 记一次数据库datetime类型比较错误

    千次阅读 2017-11-25 17:50:44
    记一次数据库datetime类型比较错误 如标题所说,记录一次因使用不同数据库(mariadb生产环境与mysql开发环境),而导致的错误。 情况如下:在进行数据日期筛选时,表时间字段使用datetime类型,并与时间参数进行...
  • UNIX_TIMESTAMP(start_time)>=1234566555 UNIX_TIMESTAMP()函数将dateTime类型数据转换为时间戳形式之后进行比较
  • 2)当插入getdate()系统函数的时候,如果是datetime类型的会转化显示日期时间数据:2013-11-21 14:07:40.750;如果是date类型的会转化为日期数据:2013-11-21  如果是time类型的会转化为时间数据:14:07:40....
  •  在使用asp.net mvc 结合jquery esayui做一个系统,但是在使用使用this.json方法直接返回一个json对象,在列表中显示时发现datetime类型数据在转为字符串是它默认转为Date(84923838332223)的格式,在经过查资料...
  • 更多的是用Date,不用做日期数据统计分析,对存取要求比较小的直接转换成long,即dateTime.getTime()存储。需要在界面上显示的时候就再将long型的日期数据转化为Date或DateTime类型。但是如果要做数据统计分析的话...
  • 当我们像mysql插入数据大于1M的时候,会出现以下错误提示: Packet for query is too large (1334541&amp;amp;amp;amp;amp;gt; 1048576). You can change this value on the server by 解决办法:查询系统...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 407
精华内容 162
关键字:

datetime数据类型比较