月 returns 日期值不正确
Month returns incorrect value from date
下午,
我的 SQL 服务器有问题,需要一些帮助才能解决。
当我 运行 一个带有日期范围的 select 语句时,它 returns 从错误的日期范围行。
例如如果我执行以下
select * from theTable where startDate between '2016-09-01 00:00:00' and '2016-09-08 23:59:59'
我希望 startDate
在 9 月 1 日到 8 日之间的行,我实际得到的是在 1 月 9 日到 8 月 9 日之间 startDate
的行。
我已经检查了我为数据库设置的语言:
select * from sys.syslanguages order by name where name = @@language
这个returns英国人
DBCC 用户选项 returns
textsize 2147483647
language British
dateformat dmy
datefirst 1
lock_timeout -1
quoted_identifier SET
arithabort SET
ansi_null_dflt_on SET
ansi_warnings SET
ansi_padding SET
ansi_nulls SET
concat_null_yields_null SET
isolation level read committed
我检查了登录的默认语言,这也是英国语。
当我执行print month('2016-09-01 00:00:00')
它 returns 1 而不是 9。除非我记错了上面的日期和时间应该是 ODBC 规范 yyyy-mm-dd hh:mi:ss(24h)
.
为什么它打印的是 1 而不是 9,更重要的是我该如何解决它?
打印中@@version
returns
Microsoft SQL Server 2005 - 9.00.5057.00 (X64)
Mar 25 2011 13:33:31
Copyright (c) 1988-2005 Microsoft Corporation
Enterprise Edition (64-bit) on Windows NT 5.2 (Build 3790: Service Pack 2)
感谢您的帮助。
如果这个已经回答了,你能指点我吗,只是我找不到答案。
您似乎有一个相对不寻常的国际化设置,默认设置是 YDM 而不是 YMD。
您始终可以使用不带连字符的日期:
select *
from theTable
where startDate >= '20160901' and
startDate < '20160909';
这些 总是 在 SQL 服务器中解释为 YYYYMMDD。
如果您希望在评估 where 条件时也考虑时间戳,请尝试将日期转换为:
CONVERT(datetime,'2016-09-01 00:00:00',101)
所以你的查询会变成:
select * from theTable
where startDate between
CONVERT(datetime,'2016-09-01 00:00:00',101)
and
CONVERT(datetime,'2016-09-08 23:59:59',101)
这样您的月份将是 [9] 而不是 [1],并且还会考虑时间戳。
下午,
我的 SQL 服务器有问题,需要一些帮助才能解决。 当我 运行 一个带有日期范围的 select 语句时,它 returns 从错误的日期范围行。
例如如果我执行以下
select * from theTable where startDate between '2016-09-01 00:00:00' and '2016-09-08 23:59:59'
我希望 startDate
在 9 月 1 日到 8 日之间的行,我实际得到的是在 1 月 9 日到 8 月 9 日之间 startDate
的行。
我已经检查了我为数据库设置的语言:
select * from sys.syslanguages order by name where name = @@language
这个returns英国人
DBCC 用户选项 returns
textsize 2147483647
language British
dateformat dmy
datefirst 1
lock_timeout -1
quoted_identifier SET
arithabort SET
ansi_null_dflt_on SET
ansi_warnings SET
ansi_padding SET
ansi_nulls SET
concat_null_yields_null SET
isolation level read committed
我检查了登录的默认语言,这也是英国语。
当我执行print month('2016-09-01 00:00:00')
它 returns 1 而不是 9。除非我记错了上面的日期和时间应该是 ODBC 规范 yyyy-mm-dd hh:mi:ss(24h)
.
为什么它打印的是 1 而不是 9,更重要的是我该如何解决它?
打印中@@version
returns
Microsoft SQL Server 2005 - 9.00.5057.00 (X64)
Mar 25 2011 13:33:31
Copyright (c) 1988-2005 Microsoft Corporation
Enterprise Edition (64-bit) on Windows NT 5.2 (Build 3790: Service Pack 2)
感谢您的帮助。 如果这个已经回答了,你能指点我吗,只是我找不到答案。
您似乎有一个相对不寻常的国际化设置,默认设置是 YDM 而不是 YMD。
您始终可以使用不带连字符的日期:
select *
from theTable
where startDate >= '20160901' and
startDate < '20160909';
这些 总是 在 SQL 服务器中解释为 YYYYMMDD。
如果您希望在评估 where 条件时也考虑时间戳,请尝试将日期转换为:
CONVERT(datetime,'2016-09-01 00:00:00',101)
所以你的查询会变成:
select * from theTable
where startDate between
CONVERT(datetime,'2016-09-01 00:00:00',101)
and
CONVERT(datetime,'2016-09-08 23:59:59',101)
这样您的月份将是 [9] 而不是 [1],并且还会考虑时间戳。