Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2005 datetime操纵:将所有日期替换为00:00时间,替换为前一天的24:00时间_Sql Server 2005_Datetime - Fatal编程技术网

Sql server 2005 datetime操纵:将所有日期替换为00:00时间,替换为前一天的24:00时间

Sql server 2005 datetime操纵:将所有日期替换为00:00时间,替换为前一天的24:00时间,sql-server-2005,datetime,Sql Server 2005,Datetime,我在这里介绍了一个表格: 时间为00:00时的日期时间字段错误。例如: 5/24/2013 00:00 这应该是: 5/23/2013 24:00 所以hour00:00对应于前一天的最后一个小时(我没有创建此表,但必须使用它)。当我选择时,有没有快捷的方法可以将所有日期替换为00:00作为24:00前一天的时间?我可以用python在for循环中轻松地完成它,但不太确定如何在sql中构造它。谢谢你的帮助 所有日期时间都是时间上的瞬间,而不是有限长度的跨度,它们只能在一天内存在。根据定义,表

我在这里介绍了一个表格:

时间为
00:00
时的日期时间字段错误。例如:

5/24/2013 00:00
这应该是:

5/23/2013 24:00

所以hour
00:00
对应于前一天的最后一个小时(我没有创建此表,但必须使用它)。当我选择时,有没有快捷的方法可以将所有日期替换为
00:00
作为
24:00
前一天的时间?我可以用python在for循环中轻松地完成它,但不太确定如何在sql中构造它。谢谢你的帮助

所有日期时间都是时间上的瞬间,而不是有限长度的跨度,它们只能在一天内存在。根据定义,表示午夜的那一刻是第二天的开始日期,即一天开始时关闭,结束时打开,或者,用另一句话来说,单个日历日期内的有效允许时间值从00:00:00.00000到23:59:59.9999不等

这类似于要求允许一小时内的分钟值从1到60变化,而不是从0到59,并且60是前一小时的最后一分钟

你所说的只是一个显示问题。即使您可以将日期输入为2013年1月1日24:00(24:00:00不是一天中的法定时间),它也将在日期1月2日开始时输入,而不是在1月1日结束时输入。
说明这一点的一件事是,请注意,由于舍入(SQL只能将datetime解析为大约300毫秒内),如果您创建的datetime仅在午夜前几千秒,它将舍入到午夜并移动到第二天,在enterprise manager中运行以下命令可以看出这一点

 Select cast ('1 Jan 2013 23:59:59.999' as datetime)
SQL server将所有日期时间存储为两个整数,一个表示自1900年1月1日起的天数,另一个表示自午夜起的滴答数(1滴答为1/300秒,约3.33毫秒)。如果从午夜起为零时间间隔,则为同一天,而不是前一天

如果您一直在插入数据,假设午夜00:00:00意味着一天的结束,则需要修复该问题

如果需要更正现有数据,则需要在数据库中以午夜为时间成分的每个日期中添加一天(即,有零时间成分)


所有日期时间都是时间上的瞬间,而不是有限长度的跨度,它们只能在一天内存在。根据定义,表示午夜的那一刻是第二天的开始日期,即一天开始时关闭,结束时打开,或者,用另一句话来说,单个日历日期内的有效允许时间值从00:00:00.00000到23:59:59.9999不等

这类似于要求允许一小时内的分钟值从1到60变化,而不是从0到59,并且60是前一小时的最后一分钟

你所说的只是一个显示问题。即使您可以将日期输入为2013年1月1日24:00(24:00:00不是一天中的法定时间),它也将在日期1月2日开始时输入,而不是在1月1日结束时输入。
说明这一点的一件事是,请注意,由于舍入(SQL只能将datetime解析为大约300毫秒内),如果您创建的datetime仅在午夜前几千秒,它将舍入到午夜并移动到第二天,在enterprise manager中运行以下命令可以看出这一点

 Select cast ('1 Jan 2013 23:59:59.999' as datetime)
SQL server将所有日期时间存储为两个整数,一个表示自1900年1月1日起的天数,另一个表示自午夜起的滴答数(1滴答为1/300秒,约3.33毫秒)。如果从午夜起为零时间间隔,则为同一天,而不是前一天

如果您一直在插入数据,假设午夜00:00:00意味着一天的结束,则需要修复该问题

如果需要更正现有数据,则需要在数据库中以午夜为时间成分的每个日期中添加一天(即,有零时间成分)


虽然
24:00
在某些地方有效,但在计算中它通常不是有效的午夜表示法。一些软件/平台会例外并允许例外,但大多数不会。虽然
24:00
在某些地方有效,但在计算中它通常不是有效的午夜表示法。一些软件/平台会例外并允许例外,但大多数不会。