我正在使用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个月)