T-Sql

如何在 Azure Synapse 中將 TIMESTAMP 轉換為 BIGINT

  • March 10, 2021

在 Azure Synapse 中將 TIMESTAMP 轉換為 BIGINT 的最佳方法是什麼。我試過這個(有效),但看起來很笨拙。有沒有更好、更簡潔、更有效的方法來做同樣的事情?

SELECT CURRENT_TIMESTAMP AS CURR_TS,
      CONVERT(BIGINT, 
          CONVERT(CHAR(8), CURRENT_TIMESTAMP, 112) + 
          REPLACE(CONVERT(CHAR(12), CURRENT_TIMESTAMP, 114), ':', '')) AS CURR_TS_NUM

稍微緊湊一點,只需一次呼叫CURRENT_TIMESTAMP,就可以用CONVERT它的格式開關(121)和TRANSLATEREPLACE來整理。這將語句從六個單獨的函式呼叫減少到四個。您也可以使用FORMAT,它只有兩個函式呼叫:

SELECT
   CURRENT_TIMESTAMP ts,
   REPLACE( TRANSLATE( CONVERT( CHAR(23), CURRENT_TIMESTAMP, 121 ), '-:.', '   ' ), ' ', '' ) c1,
   FORMAT( CURRENT_TIMESTAMP , 'yyyyMMddHHmmssfff' ) c2

但是,我會詢問是否需要儲存這些值。您可能應該為事件記錄儲存傳統的時間戳,那麼為什麼還要以編碼方式儲存這種形式的時間戳,如果您想使用它必須解壓縮呢?記錄到具有標識列的表具有類似的效果。需要考慮的事情。

引用自:https://dba.stackexchange.com/questions/286766