如何將日期/時間從20150323153528
轉換爲2015-03-23 15:35:28.000
。我需要這個根據getdate()
進行過濾。提前致謝。SQL日期/時間格式
Select * from table
Where 20150323153528 > GETDATE() - 7
如何將日期/時間從20150323153528
轉換爲2015-03-23 15:35:28.000
。我需要這個根據getdate()
進行過濾。提前致謝。SQL日期/時間格式
Select * from table
Where 20150323153528 > GETDATE() - 7
聲明,以轉換日期您的要求
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
謝謝大家。使用SQL Server 2012. mohan11 - 通過格式化日期會減慢查詢過程? – IYO
注:我認爲這是一個使用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
在MS SQL,您可以使用
DECLARE @Date varchar(20) = '20150323153528'
Select * from table Where CAST(convert(varchar,@Date) as datetime) > GETDATE() - 7
請仔細閱讀本page。
SELECT convert(varchar, getdate(), 120) — yyyy-mm-dd hh:mm:ss(24h)
哪個RDBMS是這樣的?請添加一個標籤來指定您是使用'mysql','postgresql','sql-server','oracle'還是'db2' - 或者其他的東西。 –
'Getdate'是產品特定的。標記您正在使用的dbms ... – jarlh