gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 08:48:07 25 4
gpt4 key购买 nike

我正在使用 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以下的日期。请帮助我。

谢谢!

最佳答案

如果您需要在 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 格式)。您还可以考虑添加一个计算列,将其表示为日期时间(如果它可以转换为这样的值)。

如果您需要包含时间组件,我建议将其存储为 YYYY-MM-DD"T"hh:mm:ss 格式,并再次通过检查约束强制执行。

我上面推荐的格式可以安全地转换为日期时间,而无需考虑区域设置。

如果需要,您还可以编写更严格的检查约束(例如,上面确实允许第 14 个月)

关于java - 如何解决sql server中的1753年问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8908548/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com