簡體   English   中英

SQL 服務器日期時間格式

[英]SQL server date time format

我有以下格式的日期 - yyyymmddhhmmss 例如。 20160203081617

我希望它采用以下格式 - dd/mm/yyyy hh:mm:ss

我怎么得到它?

我將假設您當前的日期/時間格式是一個字符串。

您可以使用DATETIMEFROMPARTS function 將字符串轉換為DATETIME2(3)數據類型。 然后從那里以您想要在查詢中使用的字符串日期/時間格式顯示它。

DECLARE     @OldDateTime    AS VARCHAR(15)
            , @NewDateTime  AS DATETIME2(0) ;

/* original date/time format */
SELECT      @OldDateTime    = '20160203081617' ;

/* new date/time data type */
SELECT      @NewDateTime    = DATETIMEFROMPARTS
            (
                SUBSTRING ( @OldDateTime, 1, 4 )
                , SUBSTRING ( @OldDateTime, 5, 2 )
                , SUBSTRING ( @OldDateTime, 7, 2 )
                , SUBSTRING ( @OldDateTime, 9, 2 )
                , SUBSTRING ( @OldDateTime, 11, 2 )
                , SUBSTRING ( @OldDateTime, 13, 2 )
                , 0
            ) ;

/* old, new, and formatted date/time displays */
SELECT      @OldDateTime AS [yyyymmddhhmmss]
            , @NewDateTime AS [yyyy-mm-dd hh:mm:ss]
            , CONVERT ( VARCHAR(10), @NewDateTime, 103 ) + ' '
                + CONVERT ( VARCHAR(8), @NewDateTime, 8 ) AS [dd/mm/yyyy hh:mm:ss] ;

如果您當前的日期時間已經在表列中,您可以添加計算列以將現有數據轉換為DATETIME2(3)數據類型。 再次,從那里,將其更改為您希望在SELECT語句中顯示的內容。

/* create existing table for demo */
CREATE TABLE dbo.ExistingTable
(
    [id]                INT IDENTITY(1,1)
    , [old_date_time]   VARCHAR(15)
) ;

/* insert existing data */
INSERT
    INTO    dbo.ExistingTable ( [old_date_time] )
    VALUES  ( '20160203081617' ) ;

現在創建一個計算列來轉換現有數據。

ALTER TABLE dbo.ExistingTable
    ADD [new_date_time]
    AS DATETIMEFROMPARTS
    (
        SUBSTRING ( [old_date_time], 1, 4 )     /* year */
        , SUBSTRING ( [old_date_time], 5, 2 )   /* month */
        , SUBSTRING ( [old_date_time], 7, 2 )   /* day */
        , SUBSTRING ( [old_date_time], 9, 2 )   /* hour */
        , SUBSTRING ( [old_date_time], 11, 2 )  /* minute */
        , SUBSTRING ( [old_date_time], 13, 2 )  /* second */
        , 0                                     /* millisecond */
    ) ;

然后使用一些CONVERT函數並將結果連接起來以獲得您想要的顯示。

SELECT      [old_date_time]
            , [new_date_time]
            , CONVERT ( VARCHAR(10), [new_date_time], 103 ) + ' '
                + CONVERT ( VARCHAR(8), [new_date_time], 8 )
                AS [formatted_new_date_time]
FROM        dbo.ExistingTable ;

此查詢應為您提供以下結果:

old_date_time  | new_date_time           | formatted_new_date_time
------------------------------------------------------------------
20160203081617 | 2016-02-03 08:16:17.000 | 03/02/2016 08:16:17

我剛想到您現有的日期/時間可以存儲為BIGINT 在這種情況下,同樣適用——除非您首先轉換為VARCHAR

ALTER TABLE dbo.ExistingTable
    ADD [new_date_time]
    AS DATETIMEFROMPARTS
    (
        SUBSTRING ( CAST ( [old_date_time] AS VARCHAR(15) ), 1, 4 )
        , SUBSTRING ( CAST ( [old_date_time] AS VARCHAR(15) ), 5, 2 )
        , SUBSTRING ( CAST ( [old_date_time] AS VARCHAR(15) ), 7, 2 )
        , SUBSTRING ( CAST ( [old_date_time] AS VARCHAR(15) ), 9, 2 )
        , SUBSTRING ( CAST ( [old_date_time] AS VARCHAR(15) ), 11, 2 )
        , SUBSTRING ( CAST ( [old_date_time] AS VARCHAR(15) ), 13, 2 )
        , 0
    ) ;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM