[英]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.