如何将日期/时间从20150323153528
转换为2015-03-23 15:35:28.000
。我需要根据getdate()
进行过滤。提前谢谢。
Select * from table
Where 20150323153528 > GETDATE() - 7
答案 0 :(得分: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
答案 1 :(得分:0)
注意:我假设这是使用T-SQL的Microsoft SQL Server环境:
date
/ datetime
值的格式不是T-SQL的关注点。你应该在你的表示层(即你的前端代码)中这样做。
如果您将日期/时间值表示为20150323153528
形式的整数,则无法在T-SQL中使用它们。您需要将它们转换为字符串(最好是ISO-8601格式),以便SQL Server成功地将它们内部转换为datetime
(或datetimeoffset
)值,然后可以将这些值与其他datetime
进行比较值。
我建议您在将应用程序代码发送到SQL之前执行转换,作为datetime
类型的参数值,如下所示:
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
如果整数值存储在实际列而不是参数中,则需要将逻辑转换为执行转换的标量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
答案 2 :(得分:0)
在MS SQL中,您可以使用
DECLARE @Date varchar(20) = '20150323153528'
Select * from table Where CAST(convert(varchar,@Date) as datetime) > GETDATE() - 7
答案 3 :(得分:0)
请阅读page。
SELECT convert(varchar, getdate(), 120) — yyyy-mm-dd hh:mm:ss(24h)