簡體   English   中英

T-SQL日期時間轉換

[英]T-SQL datetime conversion

我正在使用第三方數據庫,它(無論出於何種原因)內部以yyyymm格式存儲日期,例如Dec 2012 201212作為INT

有沒有一種簡單的方法可以將其轉換為SQL Server DateTime類型?

我已經嘗試手動將上面的內容轉換為長度為6的char seq,將其與'01'連接以獲得給定月份的開頭,如下所示:

(CONVERT(char(6), Period) + '01')`

然后將其包裝在datetime轉換中:

CONVERT(datetime, (CONVERT(char(6), Period) + '01'))

但這似乎扔了;

從字符串轉換日期和/或時間時轉換失敗

誰能說清楚我做錯了什么呢?

謝謝! :)

這是一種方法:

Declare @val as int = 20121231;
select DATEADD (YEAR,@val/10000-1900,DATEADD(MONTH,(@val%10000)/100-1,DATEADD(DAY,@val%100-1,0 )))

這是另一個:

Declare @val as int = 20121231;
    Cast(Cast(@val as char(8)) as date)

第一個是好的,因為你不會有任何區域設置依賴。 第二個是好的,因為它很簡短。

您需要使用正確的參數。 這是msdn圖表http://msdn.microsoft.com/en-us/library/ms187928.aspx

在你的情況下,我相信你需要附加'01'並使用它

declare @val VARCHAR(8)

SET @val = '201212'

set @val = @val + '01'

print CONVERT(DATETIME, @val, 12)

12是ISO格式,將采用yymmdd或yyyymmdd

這應該做的事情:

DECLARE @Period INTEGER = 201212 
SELECT  CAST( CAST( @Period * 100 + 1 AS CHAR(8) ) AS DATETIME )

將整數轉換為yyyy-mm-dd樣式字符串:

select  convert(datetime, 
            left(cast(dt as char(6)),4) + '-' +
            right(cast(dt as char(6)),2) + '-01',
            121) -- 121 = ODBC = yyyy-mm-dd hh:mi:ss.mmm (24h)
from    YourTable

SQL Fiddle的實例。

您可以使用一些簡單的數學運算,盡可能避免使用字符串:

declare @Start int
set @Start = 201212

select DATEADD(month,((@Start/100)-1970)*12 + (@Start%100-1),'19700101')

話雖這么說,我已經預料到你最初發布的是什么,因為YYYYMMDD是一種明確的格式。


如果您從可能包含一系列值的表中選擇這些值,只有其中一些是這些值,並且您依賴WHERE子句在轉換發生之前過濾掉無效值,那么您就不在運氣 - SQL Server有一個討厭的習慣,即可以按照自己喜歡的順序應用過濾器和轉換。

如果是這種情況,請將過濾步驟(以排除無效的Period值)移動到填充表變量或臨時表的單獨查詢中,然后在單獨的查詢中對這些值執行轉換。

你可以使用如下:

Select CAST( CAST(datepart(year,getdate()) AS VARCHAR(4))+ CAST (datepart(MONTH,getdate()) as VARCHAR(2)) AS INT) as YYYYMM

我發現以下內容非常有效。 假設您的日期的INT是YYYYMM格式。 首先乘以100,然后加1(這導致一個帶有DD為01的INT),所以你現在有YYYYMMDD而不是YYYYMM。 然后在轉換為DATETIME之前強制轉換為CHAR(8)。 希望對你有效。

DECLARE @SourceDT   INT = 201212
SELECT CAST( CAST((@SourceDT * 100) + 1 AS CHAR(8)) AS DATETIME)

暫無
暫無

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

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