我正在使用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支持日期范围b/w 1753和9999。但是我不能阻止用户输入低于1753的日期。请帮助我。

谢谢!

最佳答案

如果需要在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个月)

09-11 04:33