Sql server 你否决了一些你显然不明白的东西。而且,这里贴的每个例子都有一个演员或转换,到底是什么?更改所显示内容的表示形式…因此使用不同的方式格式化数据。我猜你会否决所有其他人,因为他们不符合你对这个问题的理解。嗯。。。检查我的个人资料。我对这方面很了解。非常感谢。关

Sql server 你否决了一些你显然不明白的东西。而且,这里贴的每个例子都有一个演员或转换,到底是什么?更改所显示内容的表示形式…因此使用不同的方式格式化数据。我猜你会否决所有其他人,因为他们不符合你对这个问题的理解。嗯。。。检查我的个人资料。我对这方面很了解。非常感谢。关,sql-server,datetime,timezone,datetimeoffset,Sql Server,Datetime,Timezone,Datetimeoffset,你否决了一些你显然不明白的东西。而且,这里贴的每个例子都有一个演员或转换,到底是什么?更改所显示内容的表示形式…因此使用不同的方式格式化数据。我猜你会否决所有其他人,因为他们不符合你对这个问题的理解。嗯。。。检查我的个人资料。我对这方面很了解。非常感谢。关键是-您已经提供了一个varchar,解决方案需要一个datetimeoffset。SQL CLR有一种方法可以做到这一点,但不是您显示的方法。如果您希望我删除否决票,请更新您的答案,以显示我在回答中提到的一种或两种SQL CLR方法。实际上,


你否决了一些你显然不明白的东西。而且,这里贴的每个例子都有一个演员或转换,到底是什么?更改所显示内容的表示形式…因此使用不同的方式格式化数据。我猜你会否决所有其他人,因为他们不符合你对这个问题的理解。嗯。。。检查我的个人资料。我对这方面很了解。非常感谢。关键是-您已经提供了一个
varchar
,解决方案需要一个
datetimeoffset
。SQL CLR有一种方法可以做到这一点,但不是您显示的方法。如果您希望我删除否决票,请更新您的答案,以显示我在回答中提到的一种或两种SQL CLR方法。实际上,
TODATETIMEOFFSET
SWITCHOFFSET
更合适,但不幸的是,两个国家都不会考虑DST,所以他们不会帮助你。谢谢你的回答!我会试试你的项目。在阅读你的答案之前,我发现我并不在乎夏令时。我来看看。
SELECT CAST(<ColumnName> AS datetimeoffset)
FROM <TableName>
UPDATE <TableName>
SET <DateColumn> = CONVERT(DATETIMEOFFSET, <DateColumn>)
WHERE ...
SWITCHOFFSET ( DATETIMEOFFSET, time_zone ) 
--SELECT SWITCHOFFSET (ColDatetimeoffset, '-03:00') 
SELECT SYSDATETIMEOFFSET() CurrentOffset
SELECT SWITCHOFFSET (SYSDATETIMEOFFSET(), '-03:00') 
SELECT CONVERT(VARCHAR, GETDATE(), 126)
SELECT CONVERT(VARCHAR, GETDATE(), 127)
public partial class UserDefinedFunctions
{
    [SqlFunction(Name = "FormatDate")]
    public static SqlString FormatDate(SqlDateTime date, SqlString formatString)
    {
        var thisDate = date.Value;
        return new SqlString (thisDate.ToString(formatString.Value));
    }
    [SqlFunction(Name = "FormatDateTimeOffset")]
    public static SqlString FormatDateTimeOffset(DateTimeOffset date, SqlString formatString)
    {
        return new SqlString(date.ToString(formatString.Value));
    }    
}
select dbo.FormatDate(getdate(), 'yyyy-MM-dd HH:mm:ss ''GMT'' zzz') as "DateTime"
select dbo.FormatDateTimeOffset(convert(datetimeoffset, getdate()), 'yyyy-MM-dd HH:mm:ss K') as "DateTimeOffset"    
var tz = TimeZoneInfo.FindSystemTimeZoneById("E. South America Standard Time");
var dto = new DateTimeOffset(yourDateTime, tz.GetUtcOffset(yourDateTime));
DECLARE @tz varchar(25)
SET @tz = 'America/Sao_Paulo';
SELECT Tzdb.SwitchZone(Tzdb.LocalToUtc(YourDateTime, @tz, 1, 1), @tz);