2016-02-12 242 views
-1

如何將日期/時間從20150323153528轉換爲2015-03-23 15:35:28.000。我需要這個根據getdate()進行過濾。提前致謝。SQL日期/時間格式

Select * from table 
Where 20150323153528 > GETDATE() - 7 
+1

哪個RDBMS是這樣的?請添加一個標籤來指定您是使用'mysql','postgresql','sql-server','oracle'還是'db2' - 或者其他的東西。 –

+0

'Getdate'是產品特定的。標記您正在使用的dbms ... – jarlh

回答

0

聲明,以轉換日期您的要求

DECLARE @Date varchar(20) = '20150323153528' 


Select * from table Where 

     CONVERT(DATETIME, CONVERT(CHAR(8), @Date), 121) + ' ' + stuff(stuff(right('000000' + cast(@Date as varchar),6),5,0,':'),3,0,':') as DATETIME > GETDATE() - 7 
+0

謝謝大家。使用SQL Server 2012. mohan11 - 通過格式化日期會減慢查詢過程? – IYO

0

注:我認爲這是一個使用T-SQL微軟SQL Server環境:

date/datetime值的格式不T-SQL的關注點。你應該在你的表現層(即你的前端代碼)中做到這一點。

如果日期/時間值表示爲20150323153528形式的整數,則不能在T-SQL中使用它們。您需要將它們轉換爲字符串(最好採用ISO-8601格式),以便SQL Server成功將它們內部轉換爲datetime(或datetimeoffset)值,然後可以將這些值與其他datetime值進行比較。

我建議在郵件應用程序的代碼轉換您發送到SQL之前,作爲datetime -typed參數值,像這樣:

Int32 weirdDateValue = 20150323153528; 
String s = weirdDateValue.ToString(CultureInfo.InvariantCulture); 
String dtValueAsIso8601 = String.Format("{0}-{1}-{2} {3}:{4}:{5}.{6}", 
    s.Substring(0, 4), s.Substring(4, 2), s.Substring(6, 2), 
    s.Substring(8, 2), s.Substring(10, 2), s.Substring(12, 2), s.Substring(14) 
); 

DateTime dtValue = DateTime.ParseExact(dtValueAsIso8601, "yyyy-MM-dd HH:mm:ss.fff"); 

cmd.Parameters.Add("@dtValue", SqlDbType.DateTime).Value = dtValue; 

在T-SQL的過程幾乎是相同的,但是使用了MID - 注意,MID使用1基於字符的索引,而不是從0:

DECLARE @input int   = 20150323153528 
DECLARE @s  varchar(14) = CONVERT(@input, nvarchar(14)) 
DECLARE @dtStr varchar(24) = MID(@s, 1, 2) + '-' + MID(@s, 3, 2) + '-' + MID(@s, 5, 2) + ' ' + -- etc... 
DECLARE @dt datetime  = CONVERT(@dtStr, datetime) 

SELECT 
    * 
FROM 
    [table] 
WHERE 
    @dt > GETDATE() - 7 

如果整數值存儲在實際列,而不是一個參數,您需要將LOGI轉換c轉換爲執行轉換的標量UDF。我強烈建議你更改表的設計增加一個強類型datetime列,並永久保存的價值在那裏,然後刪除將datetime-AS-INT列:

CREATE FUNCTION ConvertIntDateIntoDateTime(@dateAsInt int) RETURNS datetime AS 
BEGIN 

    -- same code as above minus the SELECT statement 
    RETURN @dt 

END 

用於內部子查詢允許數據在WHERE語句被訪問,就像這樣:

SELECT 
    * 
FROM 
    (
     SELECT 
      *, 
      dbo.ConvertIntDateIntoDateTime(someDateColumn) AS someDateColumn2 
     FROM 
      [table] 
    ) AS FixedTable 
WHERE 
    FixedTable.someDateColumn2 > GETDATE() - 7 
0

在MS SQL,您可以使用

DECLARE @Date varchar(20) = '20150323153528' 

Select * from table Where CAST(convert(varchar,@Date) as datetime) > GETDATE() - 7 
0

請仔細閱讀本page

SELECT convert(varchar, getdate(), 120) — yyyy-mm-dd hh:mm:ss(24h)