首页 > 开发 > 综合 > 正文

(续前)SQLServer常见问题应对

2024-07-21 02:11:28
字体:
来源:转载
供稿:网友

(续前)sqlserver常见问题应对































版权所有©ashuixu转载请保持完整并注明出处































sql语句部分































5、“令人头疼”的日期处理

问题:你是否也有过面对日期处理时的彷徨无措么?

解答:你是否了解以下事实(摘选自sqlserver2000联机帮助-datetime 数据类型:概述):

















a.日期的存储。



datetime

从 1753 年 1 月 1 日到 9999 年 12 月 31 日的日期和时间数据,精确度为百分之三秒(等于 3.33 毫秒或 0.00333 秒)。如下表所示,把值调整到 .000、.003、或 .007 秒的增量。



smalldatetime

从 1900 年 1 月 1 日到 2079 年 6 月 6 日的日期和时间数据精确到分钟。29.998 秒或更低的 smalldatetime 值向下舍入为最接近的分钟,29.999 秒或更高的 smalldatetime 值向上舍入为最接近的分钟。































microsoft sql server 用两个 4 字节的整数内部存储 datetime 数据类型的值。第一个 4 字节存储 base date(即 1900 年 1 月 1 日)之前或之后的天数。基础日期是系统参考日期。不允许早于 1753 年 1 月 1 日的 datetime 值。另外一个 4 字节存储以午夜后毫秒数所代表的每天的时间。































smalldatetime 数据类型存储日期和每天的时间,但精确度低于 datetime。sql server 将 smalldatetime 的值存储为两个 2 字节的整数。第一个 2 字节存储 1900 年 1 月 1 日后的天数。另外一个 2 字节存储午夜后的分钟数。日期范围从1900 年 1 月 1 日到 2079 年 6 月 6 日,精确到分钟。































b.没有只存储时间或日期的独立的时间和日期数据类型。当设置 datetime 或 smalldatetime 值时,如果只指定时间,则日期默认为 1900 年 1 月 1 日。如果只指定日期,则时间默认为 12:00 am(午夜)。

















c.下面是一些使用日期和时间数据的准则:















· 若要对日期和时间进行精确搜索匹配,请使用等号(=)。microsoft sql server 以 12:00:00:000 am(默认值)的精确时间形式返回年、月、日都完全匹配的日期和时间值。



· 若要搜寻日期或时间的一部分,请使用 like 运算符。sql server 首先把数据转换为 datetime 格式然后再转换为 varchar 格式。由于标准时间显示格式不包括秒和毫秒,不能使用 like 和匹配模式对其搜索,除非使用 convert 函数并把 style 参数设为 9 或 109。有关部分日期和时间搜索的更多信息,请参见 like。































· sql server 在运行时计算 datetime 常量。用于某种语言期望的日期格式的日期字符串,如果由使用不同语言和日期格式设置的连接来执行查询,则可能无法识别。例如,下面的视图对于语言设置为美国英语的连接可以工作正常,但对于其它语言设置的连接就不能工作正常:















    create view usa_dates as

    select *

    from northwind.dbo.orders

    where orderdate < 'may 1, 1997'















当在查询中使用 datetime 常量,而且该查询由使用不同语言设置的连接执行时,需确保日期对于所有语言设置均是可以接受的。对于国际数据库中永久对象中的 datetime 常量,比如表约束和查看 where 子句,必须同样小心。有关所有语言设置都解释为相同的日期格式的更多信息,请参见编写国际 transact-sql 语句。















sql server 可以识别以下列格式括在单引号 (') 中的日期和时间:















· 字母日期格式(例如,'april 15, 1998')















· 数字日期格式(例如,'4/15/1998'、'april 15,1998')















· 未分隔的字符串格式(例如'19981207'、'december 12, 1998')  















6、设计期无法确定的sql语句















问题:在写存储过程时,有些sql语句在设计期是不确定的,这样的sql语句怎么写呢?















解答:用系统存储过程sp_executesql。































7、常用且重要函数、关键字和子句















a.case - 计算条件列表并返回多个可能结果表达式之一















b.isnull - 使用指定的替换值替换 null















c.having 子句 - 指定组或聚合的搜索条件。having 通常与 group by 子句一起使用。如果不使用 group by 子句,having 的行为与 where 子句一样。














发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表