sql-server - 如果“日期字段”错误,我们可以自动输入默认日期吗
问题描述
我从另一个表中自动获取一些数据。日期列是一个字符串。我将此列转换为日期时间。但有时日期字段类似于"01.01.0002"
or "01.01.0202"
。当它发生这样的我得到这个错误:
“SqlDateTime 溢出。必须在 1/1/1753 12:00:00 AM 和 12/31/9999 11:59:59 PM 之间。”
"1/1/1753"
当出现错误时,是否可以使用 If 语句将日期作为默认日期?
解决方案
Datetime和Datetime2数据类型的最小值和最大值,如下所示
+-----------+-----------------------------+------------------------------+-------------------------------------------------------------------------+
| DataType | MIN | MAX | STORAGE |
+-----------+-----------------------------+------------------------------+-------------------------------------------------------------------------+
| Datetime | 1753-01-01 00:00:00.000 | 12/31/9999 12:00:00 AM | 8 bytes |
| Datetime2 | 0001-01-01 00:00:00.0000000 | '9999-12-31 23:59:59.9999999 | Presicion 1-2 = 6 bytes precision 3-4 = 7 bytes precision 5-7 = 8 bytes |
+-----------+-----------------------------+------------------------------+-------------------------------------------------------------------------+
根据这些详细信息,您可以针对您的问题使用以下转换。如果TRY_CAST不能转换 DateTime 它返回 NULL 表达式,所以我们将用“ 1753-01-01 ”更改这个NULL值
SELECT TRY_CAST(ISNULL(TRY_CAST('01.01.0002' AS DATETIME), '1753-01-01') AS DATETIME) DateTime_Convert,
TRY_CAST('01.01.0002' AS DATETIME2) AS DateTime2_Convert;
结果:
更新的结果集
+-------------------------+-----------------------------+
| DateTime_Convert | DateTime2_Convert |
+-------------------------+-----------------------------+
| 1753-01-01 00:00:00.000 | 0002-01-01 00:00:00.0000000 |
+-------------------------+-----------------------------+
推荐阅读
- postgresql - 如何在不阻塞 Postgresql 语句的情况下更改表添加列?
- javascript - 初始产品数组未正确显示
- javascript - 在 HighCharts 中调用 addPoint 挂起
- java - java防止标头,cookie注入?
- windows-10 - Windows 10 屏幕锁定最后机会
- ansible - 将文件下载到 ansible 控制器而不是远程机器
- sql-server - 如果工作表名称中有空格(SSIS),如何跳过 OpenRowset 中 xlsx 源的前几行?
- php - Laravel 邮件队列中断西里尔文发件人姓名编码
- ansible - 如何检查文件中的目录列表,但某些条目有多个目录,以逗号分隔
- dictionary - Julia 将 NamedTuple 转换为 Dict