如何解决sql server中的1753年问题?

2024-04-01

我正在使用 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(使用前将#替换为@)

如何解决sql server中的1753年问题? 的相关文章

随机推荐