【发布时间】:2020-11-30 08:33:52
【问题描述】:
我使用了 SQL Server。我将具有不同比例的 datetime2 列中的值转换为字符串,并将它们与处理空值(如果存在)进行比较。因此,我需要通过一个查询来转换这些数据而不拖尾空值,而无需任何程序 例如,
'2018-06-23 07:30:20.100' should be '2018-06-23 07:30:20.1'
'2018-06-23 07:30:20.000' should be '2018-06-23 07:30:20.'
'2018-06-23 07:30:20.101' should be '2018-06-23 07:30:20.101'
我使用了以下内容:
select CONVERT(VARCHAR, col1, 126) from [DBO].[DATE_TABLE1]
但它显示了意想不到的结果:
'2018-06-23 07:30:20.100' defined as '2018-06-23 07:30:20.100' - **unexpected(trailing zeros weren't removed)**
'2018-06-23 07:30:20.000' defined as '2018-06-23 07:30:20' - expected
'2018-06-23 07:30:20.101' defined as '2018-06-23 07:30:20.101' - expected
如何在没有尾随零的情况下转换 datatime2 值? 谢谢
【问题讨论】:
-
在 SQL 中,你不需要。这是您的表示层的任务。
-
I converted value from datetime2 column with different scales to string and compare them to process null values if they are exist为什么???datetime2没有尾随零,它是一个二进制值,就像decimal。您不需要将其转换为字符串来检查 null,事实上这是没有意义的 - null 仍然是 null。 real 问题是如何检查相等性的吗?您不会将decimal转换为字符串来检查是否相等。您要么将两个值转换为相同的精度,要么检查绝对差是否小于限制 -
那么你到底想做什么?不管是什么,都不涉及字符串
-
should be '2018-06-23 07:30:20.1'不,不应该。除了旧的数字手表,人类不会像这样写毫秒。.1是 100 毫秒,没有人希望将其视为.1,除非没有空间显示更多数字。即使那样,位数也是固定的 - 在秒表中,您总是只能看到一个小数位 -
它是非常重要,因为这个问题没有意义。没有尾随零 - 这两个值相同。如果你写了
where t1=t2,你就会得到匹配。正是因为没有格式。您是否尝试过将它们按原样进行比较?如果需要截断毫秒,使用cast(colN as datetime2(1))转换成同样的精度
标签: sql-server datetime2