我正在使用 sqlserver 来存储/搜索。问题是我有一个表格,需要开始日期和结束日期进行搜索。如果我输入 1753 年之后的日期就没有问题。如果我输入 1752 年以下的任何日期,则会出现以下异常:
The conversion of a char data type to a datetime data type resulted in an out-of-range datetime value.
我知道 sql server 支持黑白 1753 和 9999 的日期范围。但我无法阻止用户输入低于 1753 的日期。请帮助我。
Thanks!
如果您需要在 SQL Server 2005 中存储 1753 年之前的日期,那么您必须将其存储为文本。
如果您仅存储日期(没有时间部分),那么我建议:
CREATE TABLE Tab (
/* Other Columns */,
FunnyDate char(8) not null,
constraint CK_FunnyDate_MostlyValid CHECK (
FunnyDate like '[0-9][0-9][0-9][0-9][0-1][0-9][0-3][0-9]')
/* Other constraints */
)
这应该迫使它非常类似于有效日期(在YYYYMMDD
格式)。您还可以考虑添加一个计算列,它将其表示为datetime
,如果它可以转换为这样的值。
如果您需要包含时间组件,我建议将其存储在YYYY-MM-DD"T"hh:mm:ss
格式,并再次由检查约束强制执行。
我上面推荐的格式可以安全地转换为日期时间,而无需考虑区域设置。
如果需要,您还可以编写更严格的检查约束(例如,上面确实允许第 14 个月)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)