SQL日期/时间格式

时间:2016-02-12 05:49:42

标签: sql

如何将日期/时间从20150323153528转换为2015-03-23 15:35:28.000。我需要根据getdate()进行过滤。提前谢谢。

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

4 个答案:

答案 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)