gpt4 book ai didi

sql - 转换与转换 SQL Server

转载 作者:行者123 更新时间:2023-12-04 22:40:21 25 4
gpt4 key购买 nike

我经常使用 SQL Server 中的日期时间列。现在大多数时候我必须将日期时间的时间部分重置为“00:00:00.000”。

我使用 cast 函数来实现相同的目的:

select cast(cast(getdate() as date)as datetime)

现在我的其他一些团队成员使用其他功能:

select cast(floor(cast(GETDATE() as float))as datetime)

SELECT CONVERT(VARCHAR,GETDATE(),105)

我应该使用哪个函数来记住索引列是日期时间类型的列。 (因此我使用转换两次转换日期时间 -> 日期 -> 日期时间)。

最佳答案

您有充分的理由不应该执行第二个和第三个选项。首先考虑这个:

select cast(floor(cast(GETDATE() as float)) as datetime)

我的问题是,虽然它确实有效,但我找不到指定行为的文档。内部格式不是 float ;它是两个整数,所以我发现从日期/时间到 float 很不优雅。可能存在危险的情况。

下一步:

SELECT CONVERT(VARCHAR,GETDATE(),105)

这个版本。 . .啊!它有没有长度参数的 varchar()。坏习惯。不要那样做!这是一个等待发生的令人困惑的问题。那么,让我们考虑一下:

SELECT CONVERT(VARCHAR(10), GETDATE(), 105)

如果您想要一个字符串,这很好,但结果与您的其他查询不同。等效语句是:

SELECT CONVERT(DATE, CONVERT(VARCHAR(10), GETDATE(), 105), 105)

但是等等,为什么要遍历字符串的中间结构?您首先提出的版本更简单。

唯一的缺点是它与 2008 之前版本的 SQL Server 不兼容。如果您需要与早期版本兼容,那么我会选择令人讨厌的:

SELECT DATEADD(day, DATEDIFF(day, 0, GETDATE()), 0)

这会计算自虚构的“0”日期以来的天数,然后将它们加回去。如果您不介意打字,以下内容几乎相同:

SELECT DATEADD(day, DATEDIFF(day, '1900-01-01', GETDATE()), '1900-01-01')

或者遍历一个中间字符串值。

SQL Server 对此功能有多种解决方法的原因是该功能非常有用,但 date 日期类型仅在 SQL Server 2008 中引入。

关于sql - 转换与转换 SQL Server,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30402358/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com