微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

关于SqlServer中的日期存放格式

为了方便测试,我们用sqlserver2000中的用例数据库来做为测试数据

首先执行

use  pubs

go

select  pubdate  from  titles

 出来的结果很明显,是一列日期组成的数据,大部份是1991年开头的,那我就想了,把所有1991年开头的都查出

来,也就是滤掉其它年份,那么我会执行下面语句

select  pubdate  from  titles  where  pubdate  like   ' 1991% '

心想,这么简单的语句应该不会出什么问题,可结果出来了,竟鬼使神差地什么数据都没查出来,分析原因

(1)难道现在头晕,语句写错了! 鬼话,语句写语了分析能成功吗?推翻之!

(2)难道对像列搞错了,检查了N编,没错哦~!

(3)难道是微软惊天大Bug,微软出这样的Bug的话早就挂掉了!推翻之!

跟朋友讨论了一个,他给了我这个表,一看,豁然开朗。

不带世纪数位 (yy) 带世纪数位 (yyyy)
标准

输入/输出**
- 0 或 100 (*) 认值 mon dd yyyy hh:miAM(或 PM)
1 101 美国 mm/dd/yyyy
2 102 ANSI yy.mm.dd
3 103 英国/法国 dd/mm/yy
4 104 德国 dd.mm.yy
5 105 意大利 dd-mm-yy
6 106 - dd mon yy
7 107 - mon dd,yy
8 108 - hh:mm:ss
- 9 或 109 (*) 认值 + 毫秒 mon dd yyyy hh:mi:ss:mmmAM(或 PM)
10 110 美国 mm-dd-yy
11 111 日本 yy/mm/dd
12 112 ISO yymmdd
- 13 或 113 (*) 欧洲认值 + 毫秒 dd mon yyyy hh:mm:ss:mmm(24h)
14 114 - hh:mi:ss:mmm(24h)
- 20 或 120 (*) ODBC 规范 yyyy-mm-dd hh:mm:ss[.fff]
- 21 或 121 (*) ODBC 规范(带毫秒) yyyy-mm-dd hh:mm:ss[.fff]
- 126(***) ISO8601 yyyy-mm-dd Thh:mm:ss:mmm(不含空格)
- 130* 科威特 dd mon yyyy hh:mi:ss:mmmAM
- 131* 科威特 dd/mm/yy hh:mi:ss:mmmAM

注意到这行了吗?

1 101 美国 mm/dd/yyyy

mm/dd/yy

再执行以下语句

select  pubdate  from  titles  where  pubdate  like   ' %1991% '

结果不出所料,原来在sqlServer中,日期查出来虽然是以yyyy/mm/dd显示,但是实际数据是以mm/dd/yyyy存放,

所以用like '1991%自然就查不到数据',为了进一步验证,执行以下语句

select  pubdate  from  titles  where  pubdate  like   ' 06% '

6月份所有的日期都查出来了!!这下问题就很清析了!!

以上这些语句是很基础的,但是当时开发的时候被这个问题花了30分钟,心有不甘所以怎么样也要写下来,希望同

时能帮助一些和我一样的小菜鸟!!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐