【问题标题】:Remove milliseconds from timestamp从时间戳中删除毫秒
【发布时间】:2022-01-01 06:40:55
【问题描述】:

如何从时间戳中删除毫秒(分数)?

例如 to_timstamp_ntz('2021-12-28 14:25:36') 返回 2021-12-20 14:25:36.000

【问题讨论】:

  • 试试这个代码:SELECT CONVERT(DATE, GETDATE()) AS date, CONVERT(TIME(0), GETDATE()) AS time @ajcoder

标签: snowflake-cloud-data-platform


【解决方案1】:

这取决于你想要达到的结果。 时间戳数据类型始终包含毫秒。

假设你有这样一个变量:

set t = to_timestamp_ntz('2021-12-28 14:25:36.300');

您可以截断毫秒并保留相同的数据类型,您仍然会看到零但不会看到不同的值:

select date_trunc('SECOND', $t);

+--------------------------+
| DATE_TRUNC('SECOND', $T) |
+--------------------------+
| 2021-12-28 14:25:36.000  |
+--------------------------+

您可以将时间戳值转换为 char 或 varchar 并在转换时删除毫秒:

select to_varchar($t, 'YYYY-MM-DD HH24:MI:SS');

+-----------------------------------------+
| TO_VARCHAR($T, 'YYYY-MM-DD HH24:MI:SS') |
+-----------------------------------------+
| 2021-12-28 14:25:36                     |
+-----------------------------------------+

如果你只想摆脱显示结果中的毫秒数,而不是改变类型,我建议改变会话或用户设置:

alter session set timestamp_ntz_output_format = 'YYYY-MM-DD HH24:MI:SS';
select $t;

+---------------------+
|         $T          |
+---------------------+
| 2021-12-28 14:25:36 |
+---------------------+

参考:DATE_TRUNCTO_VARCHARTIMESTAMP_NTZ_OUTPUT_FORMAT

【讨论】:

  • 是的,我想通过在会话级别设置 timestamp_ntz_output_format 但我想将此转换用作视图创建的一部分。所以我相信每当视图刷新时它都不起作用。是在帐户级别设置它的唯一其他选项吗?我显然不能更改帐户。有解决办法吗?
  • 出于好奇,您为什么要强制视图如何向查询它的用户呈现日期/时间字段? Snowflake 允许这是最终用户的偏好,而不是强制格式。您能否只允许最终用户选择他们希望如何格式化日期?如果不是,请在帐户级别进行更改。
猜你喜欢
  • 1970-01-01
  • 2012-10-18
  • 1970-01-01
  • 2018-04-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多