Sql-Server

MS SQL - 日期和時間樣式轉換問題

  • April 21, 2020

我需要將日期和時間樣式從美國格式轉換為德語,然後將其轉換為int數據類型。因此,如果我想在標準 112 (ISO) 中顯示它,那麼對於以下情況下的變數可以正常工作

DECLARE @LoopDate datetime
SET @LoopDate = '12/23/2015'
SELECT @LoopDate AS Original, 
CAST(CONVERT(VARCHAR(8), @LoopDate, 112) AS int) AS int;

但是當我把 104 假設給我錯誤時:

將 varchar 值“23.10.2015”轉換為數據類型 int 時轉換失敗。

看起來轉換實際上是有效的,但轉換int為無效。

104 格式包含.在其中,這就是它失敗的原因,而 112 沒有點,因此您可以將其轉換為 int。請參閱https://docs.microsoft.com/en-us/sql/t-sql/functions/cast-and-convert-transact-sql?view=sql-server-2017

DECLARE @LoopDate datetime
SET @LoopDate = '12/23/2015'
SELECT @LoopDate AS Original,
CONVERT(VARCHAR(8), @LoopDate, 104) as GermanDate_WithDot, -- see the dot  
cast(replace(CONVERT(VARCHAR(8), @LoopDate, 104),'.','') as int)  as ProperlyCastedGermanDate_WithoutDot,
CAST(CONVERT(VARCHAR(8), @LoopDate, 112) AS int) AS ISOCasted_Date_asInt  ;

注意:將 date 轉換為 int 用於以後的一些數學運算並不是一個好主意。

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