为了方便测试,我们用sqlserver2000中的用例数据库来做为测试数据
首先执行
出来的结果很明显,是一列日期组成的数据,大部份是1991年开头的,那我就想了,把所有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
再执行以下语句
结果不出所料,原来在sqlServer中,日期查出来虽然是以yyyy/mm/dd显示,但是实际数据是以mm/dd/yyyy存放,
所以用like '1991%自然就查不到数据',为了进一步验证,执行以下语句
6月份所有的日期都查出来了!!这下问题就很清析了!!
以上这些语句是很基础的,但是当时开发的时候被这个问题花了30分钟,心有不甘所以怎么样也要写下来,希望同
时能帮助一些和我一样的小菜鸟!!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。