【问题标题】:Specify datetime2 format in Azure SQL data warehouse (synapse)在 Azure SQL 数据仓库(突触)中指定 datetime2 格式
【发布时间】:2021-01-02 02:31:03
【问题描述】:

在 Azure SQL 数据仓库中创建表时指定 datetime2 字段格式的正确方法是什么?我似乎无法在文档中找到示例。

数据如下:

“2020-09-14T20:50:48.000Z”

CREATE TABLE [Foo].[Bar](
    ...
    MyDateTime datetime2(['YYYY-MM-DDThh:mm:ss[.fractional seconds]')
)

【问题讨论】:

  • 日期没有格式,它们是二进制值,就像intdecimalvarbinary。没有如果或但是。仅当基于该二进制值生成字符串或将字符串解析为该二进制值时,格式才适用。格式化是 client 的工作,无论是 Web 应用程序还是报告引擎。毕竟,只有客户端知道最终用户的区域设置和区域设置
  • BTW 适用于所有 数据库产品,而不仅仅是 SQL Server。这就是允许数据库以任何语言环境、任何格式为客户提供服务的原因。如果您使用本地化格式存储日期 string ,则如果不使用完全相同的格式(别介意占用额外空间),您将无法读取它。更糟糕的是,没有办法检查不正确的解析——4/7 是什么? 7 月 4 日还是 4 月 7 日?

标签: azure data-warehouse azure-sqldw azure-synapse


【解决方案1】:

正如 Panagiotis 所指出的,底层表示是实际日期值的 int/long。这就是 RDBMS 引擎如何快速计算两个日期之间的差异(星期一和星期五之间的日期是一个简单的减法问题)。要回答您的问题,您只需将创建表的格式设置为:

CREATE TABLE [Foo].[Bar](
    ...
    MyDateTime datetime2
)

如果您对格式化查询中的结果感兴趣,可以查看CONVERTFORMAT 函数。例如,如果您想要格式 dd-mm-yyyy(意大利日期),您可以使用以下任一格式:

SELECT
    CONVERT(VARCHAR, CURRENT_TIMESTAMP, 105)
    , FORMAT(CURRENT_TIMESTAMP, 'dd-MM-yyyy')

注意:CONVERT 通常比 FORMAT 快,如果您有受支持的日期格式,这是推荐的方法。这是因为 FORMAT 函数依赖于包含上下文/进程跳转的 CLR。​​

【讨论】:

    猜你喜欢
    • 2016-06-30
    • 2021-05-09
    • 1970-01-01
    • 2016-11-28
    • 2016-10-26
    • 2016-02-06
    • 2017-06-28
    • 2018-05-12
    • 1970-01-01
    相关资源
    最近更新 更多