【发布时间】:2021-08-20 21:28:51
【问题描述】:
我报告的数据库使用 decimal(17,6) 作为日期字段的数据类型。例如,此字段中的当前日期/时间为20210820.171900。不寻常,但无论如何。我需要将原始日期字段从十进制(17,6)转换为日期时间。这就是我所拥有的:
SELECT convert(datetime, convert(varchar,convert(int, lastmoddatetime)), 0)
from Table1
只要此列中没有记录的值为零,上述语句就可以正常工作。不幸的是,如果没有为其计算日期,则该列值默认为零 (0.000000)。每当一列的值为零时,我都会收到以下错误:
从字符串转换日期时转换失败。
我该如何克服这个问题?最终,我需要将 dateadd 函数应用于 lastmoddatetime 字段。
注意:在您建议更改列定义之前,此数据库起源于 1990 年代,我不允许对数据库结构进行任何更改。
【问题讨论】:
-
先发制人的注意事项: 保存您的 cmets 关于该字段的设置有多愚蠢以及需要正确创建它。我同意他们的看法。然而,这个笨重的数据库起源于 1990 年代,我不能对数据库结构进行任何更改。
-
期望的结果是那些日期值为零的记录,它将被转换为实际日期(或保持为零,不太可能),然后可以从结果集中过滤掉。
-
请向minimal reproducible example 提供示例数据、您的尝试和您想要的结果。
-
我们不知道“日期字段(十进制数据类型)”是什么意思。我们看不到您的数据来推断它使用的任何方案
-
我已经编辑了原始问题,所以希望我更清楚。我的问题的底线是在转换为日期数据类型时如何处理零值。
标签: sql sql-server tsql datetime