![]() |
1
2223
论
在旧版本上,可以执行以下操作:
例如
给我
赞成的意见:
|
![]() |
2
678
SQLServer2008现在有一个“日期”数据类型,它只包含一个没有时间组件的日期。任何使用SQLServer 2008及更高版本的用户都可以执行以下操作:
|
![]() |
3
153
如果使用SQL 2008及更高版本:
|
![]() |
4
70
dateadd和datediff比转换为varchar更好。两个查询具有相同的执行计划,但执行计划主要涉及 数据 访问策略并不总是显示执行所有部件所花费的CPU时间所涉及的隐含成本。如果两个查询都是针对一个有数百万行的表运行的,那么使用datediff的CPU时间可以接近转换CPU时间的1/3! 要查看查询的执行计划,请执行以下操作:
dateadd和datediff都将执行convert_隐式。 虽然转换解决方案对某些人来说更简单、更容易阅读,但是 是 更慢的。不需要强制转换回datetime(这是由服务器隐式完成的)。在datediff方法中,也不需要在后面使用dateadd,因为整数结果也将隐式转换回datetime。 选择convert(varchar,mydate,101)from datestab
从datestab中选择dateadd(dd,0,datediff(dd,0,mydate))。
按@digi recommended使用floor()的性能更接近于datediff,但不建议将datetime数据类型强制转换为float,而back并不总是生成原始值。 记住伙计们:不要相信任何人。查看性能统计数据,然后自己测试它! 测试结果时要小心。选择多行到客户机将隐藏性能差异,因为通过网络发送行比执行计算花费的时间更长。因此,请确保所有行的工作都由服务器完成,但没有发送到客户机的行集。 对于某些人来说,关于缓存优化何时影响查询似乎有些困惑。在同一批或不同批中运行两个查询对缓存没有影响。因此,您可以手动终止缓存,也可以简单地来回运行查询多次。对查询2的任何优化也会影响任何后续查询,因此如果愿意,可以抛出执行1。 这里是 full test script and performance results 这证明了datediff比转换为varchar快得多。 |
![]() |
5
41
|
![]() |
6
37
|
![]() |
7
19
你可以使用
Date and Time Manipulation in SQL Server 2000 使用convert函数的语法是:
|
![]() |
8
17
以日期格式返回
上述代码将在SQL Server 2010中工作。 它会像2013年12月12日一样回来 对于SQL Server 2012,请使用以下代码
|
![]() |
9
13
使用floor()-只需切割时间部分。
|
![]() |
10
12
|
![]() |
11
11
如果要使用convert并获得与提出的原始问题相同的输出,即,yyyy-mm-dd,则使用
如果我能在肥皂盒上呆一会儿, 这种格式不属于数据层 这就是为什么在引入实际的日期部分数据类型之前,没有愚蠢的高开销“技巧”是不可能的。在数据层中进行这样的转换是对DBMS的巨大开销,但更重要的是,当您这样做时,基本上已经在内存中创建了孤立的数据,我认为您将返回到程序。您不能将它放回另一个3nf+列中,或者在不进行恢复的情况下将其与任何类型的列进行比较,因此您所做的只是引入故障点并删除关系引用。 您应该始终继续并将日期时间数据类型返回到调用程序,并且 在表示层中,进行任何必要的调整。 在将它们返回给调用者之前,一旦转换了它们,应用程序就不再希望引用完整性了。这将再次阻止更新或删除操作,除非您执行某种手动恢复操作,当不需要时,这会再次将您的数据暴露于human/code/gremlin错误中。 |
![]() |
12
10
编辑:前两个方法基本相同,out执行convert to varchar方法。 |
![]() |
13
9
为了获得指示的结果,我使用以下命令。
我觉得它很有用。 |
![]() |
14
9
如果需要varchar数据类型的结果,您应该
上面已经提到了 如果您需要日期和时间格式的结果,您应该通过下面的任何查询
1)
2)
3)
--2014年3月26日00:00:00.000 |
![]() |
15
9
如果您正在使用 SQL Server 2012或更高版本 ,
使用
SQL Server已经有多个答案和格式类型。 但大多数方法都有点含糊不清,您很难记住格式类型或函数相对于特定日期格式的数字。这就是为什么在下一个版本的SQL Server中有更好的选择。
区域性选项非常有用,因为您可以根据查看者指定日期。 你必须记住d(小图案)和d(长图案)。 1.“D”-短日期模式。
2.“D”-长日期模式。
查询中的更多示例。
如果需要更多格式,可以转到: |
![]() |
16
8
|
![]() |
17
7
如果要将结果分配给列或变量,请为其指定日期类型,并且转换是隐式的。
|
![]() |
18
6
我认为这在你的情况下是可行的:
|
![]() |
19
6
好吧,尽管我有点晚了:)这是另一个解决办法。
结果
如果您使用的是SQL Server 2012及更高版本,则可以使用
|
![]() |
20
5
即使使用古老的MSSQLServer7.0,这里的代码 link )允许我获取当时所需的任何日期格式:
它产生了这个输出:
|
![]() |
21
5
|
![]() |
22
4
我赞成以下未提及的内容:
它也不关心本地或进行双重转换——尽管每个“日期部分”可能都进行数学运算。因此,它可能比datediff方法慢一点,但对我来说,它更清楚。尤其是当我只想按年份和月份分组时(将日期设置为1)。 |
![]() |
23
4
戴特: SELECT CONVERT(date, GETDATE()) SELECT CAST(GETDATE() as date) 时间: SELECT CONVERT(time , GETDATE() , 114) SELECT CAST(GETDATE() as time) |
![]() |
24
4
从SQL Server 2012开始,可以执行以下操作:
|
![]() |
25
4
在SQL Server 2000上
|
![]() |
26
3
为什么不使用日期格式(您的“日期”列,“%d-%m-%y”)?
前任:
您可以通过重新安排来更改m、d和year的顺序
|
![]() |
27
3
这是所有答案中缺失的,可能不是最有效的,但很容易写和理解,不需要样式,没有复杂的日期函数。
|
![]() |
28
3
简单来说,你可以这样做:
输出为:
或者简单地这样做:
结果:
|
![]() |
29
2
日期部分和日期格式可以使用以下内容: datename=>返回表示指定日期的指定日期部分的字符串
日期添加=>
datepart=>返回表示指定日期的指定日期部分的整数。
|
![]() |
30
2
日期(日期和时间字段) 和 日期格式(日期和时间,'%y-%m-%d') 两个回报 只有日期 开始日期和时间 |
![]() |
Duvan · 将逗号(,)替换为点(.)[副本] 2 年前 |
![]() |
Mateen Bagheri · 选择表的计数并选择其自身 2 年前 |
![]() |
SoT · SQL Server中求和函数的工作方式 2 年前 |
![]() |
NKAT · 将列值聚合到列表中会产生错误 2 年前 |
![]() |
deanpillow · 返回两列中有一个匹配值的记录 2 年前 |
![]() |
snowflakes74 · 在Dapper中异步查询多个结果 2 年前 |