【问题标题】:SQL convert datetime and subtract hoursSQL 转换日期时间并减去小时数
【发布时间】:2012-09-27 05:32:10
【问题描述】:

我正在尝试将 datetime (createTime) 字段从其默认的 2012-10-06 02:29:37.243 格式转换为 am/pm 所以我使用

convert(varchar, CreateTime, 100) as CreateTime

并获得 2012 年 10 月 6 日上午 4:29

到目前为止一切顺利,但在同一个语句中,我想减去 4 小时,然后显示该字段(GMT 问题)。

我在这里浏览了一些帖子,但找不到任何可以在单个语句中完成的内容。

【问题讨论】:

    标签: sql-server sql-server-2008 tsql


    【解决方案1】:
    declare @createTime datetime = '2012-10-06 02:29:37.243';
    
    -- original value, default formatting
    select @createTime;
    
    -- formatted
    select convert(varchar, @createTime, 100);
    
    -- subtract 4 hours, formatted
    select convert(varchar, dateadd(hour, -4, @createTime), 100);
    

    上面使用dateadd 的查询总是会减去4 小时。如果您的目标是将任意日期时间从 UTC 转换为本地时间,那么它会更复杂,因为您需要添加/减去的偏移量取决于原始日期时间。像 -4 这样的单个值并不总是有效。以下是处理一般情况的一些想法:

    Effectively Converting dates between UTC and Local (ie. PST) time in SQL 2005

    【讨论】:

    • 谢谢,选择 convert(varchar, dateadd(hour, -4, @createTime), 100);成功了
    【解决方案2】:

    对于想要减去天数和小时数的人

        declare @createTime datetime = '2012-10-06 02:29:37.243';
    select @createtime as originaltime, dateadd(day, -4, dateadd(hour,-1,@createtime))as minus4daysandhour
    

    【讨论】:

      【解决方案3】:

      对于 SQL 服务器,您可以使用 datetimeoffset

      对于 mysql 使用 CONVERT_TZ 函数来转换到不同的时区。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-05-13
        • 2020-12-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多