gpt4 book ai didi

sql-server - 使用 SQL Server 2012 中的日期时间解决 TRY_PARSE() 溢出。必须介于 1/1/1753 12 :00:00 AM and 12/31/9999 11:59:59 PM 之间

转载 作者:行者123 更新时间:2023-12-01 11:40:34 27 4
gpt4 key购买 nike

我最近开始更改查询以使用 TRY_PARSE()但是当结果日期在 1753 年之前时我遇到了问题。例如:

SELECT TRY_PARSE('01-Jan-0001' AS datetime)

导致 .NET 错误:
Msg 6521, Level 16, State 1, Line 1
A .NET Framework error occurred during statement execution:
System.Data.SqlTypes.SqlTypeException: SqlDateTime overflow. Must be between 1/1/1753 12:00:00 AM and 12/31/9999 11:59:59 PM.
System.Data.SqlTypes.SqlTypeException:
at System.Data.SqlTypes.SqlDateTime.FromTimeSpan(TimeSpan value)
at System.Data.SqlTypes.SqlDateTime.FromDateTime(DateTime value)
at System.Data.SqlServer.Internal.CXVariantBase.DateTimeToSSDate(DateTime dt)

我的猜测是 SQL 只是运行一个直接的 .NET DateTime.TryParse()并直接转换为 SqlDateTime没有检查和返回 NULL在这种情况下(正如我所期望的那样)。我会检查自己,但这里的问题 22 是当您需要解析以检查有效性时,如何在解析之前检查日期的有效性?
.

最佳答案

为避免溢出,您只需更改为 DATETIME2数据类型。以下是两种 Date 数据类型的日期范围。
DATETIME日期范围:1753 年 1 月 1 日至 9999 年 12 月 31 日
http://msdn.microsoft.com/en-us/library/ms187819.aspx
DATETIME2日期范围:0001-01-01 到 9999-12-31
http://msdn.microsoft.com/en-us/library/bb677335.aspx

关于sql-server - 使用 SQL Server 2012 中的日期时间解决 TRY_PARSE() 溢出。必须介于 1/1/1753 12 :00:00 AM and 12/31/9999 11:59:59 PM 之间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21255077/

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