Sql server 设置SQL Server上筛选器和结果的日期格式

Sql server 设置SQL Server上筛选器和结果的日期格式,sql-server,date,Sql Server,Date,我查询的日期格式有问题 在SQL Server中执行以下查询时: select * from users where register_date >= '2015-03-17' select * from users where register_date >= '2015-17-03' 它向我抛出了一个转换错误 但如果我执行以下查询: select * from users where register_date >= '2015-03-17' select * fro

我查询的日期格式有问题

在SQL Server中执行以下查询时:

select *
from users
where register_date >= '2015-03-17'
select *
from users
where register_date >= '2015-17-03'
它向我抛出了一个转换错误

但如果我执行以下查询:

select *
from users
where register_date >= '2015-03-17'
select *
from users
where register_date >= '2015-17-03'
它返回正确的数据,但当我看到
register\u date
列时,它将日期显示为'YYYY-MM-DD'格式…因此有点混乱


如何将SQL Server配置为在筛选器和结果上始终使用“YYYY-MM-DD”格式?

SQL Server不以任何字符串格式存储
DateTime
,而是存储为8字节的数值

各种设置(语言、日期格式)仅影响在SQL Server Management Studio中向您显示日期时间的方式,或者在您尝试将字符串转换为日期时间时如何解析日期时间

SQL Server支持多种格式-请参阅。大多数格式取决于您的设置,因此,这些设置有时可能有效,有时无效

解决此问题的方法是使用SQL Server支持的(稍作调整的)ISO-8601日期格式,无论您的SQL Server语言和日期格式设置如何,此格式始终有效

SQL Server支持的有两种风格:

  • YYYYMMDD
    仅适用于日期(无时间段);注意:无破折号,这非常重要
    YYYY-MM-DD
    独立于SQL Server中的日期格式设置,在所有情况下都将工作
或:

  • 日期和时间的
    YYYY-MM-DDTHH:MM:SS
    -此处注意:此格式有破折号(但可以省略),并且在
    DATETIME
    的日期和时间部分之间有一个固定的
    T
    分隔符
这对SQL Server 2000及更新版本有效

如果您使用SQL Server 2008或更高版本以及
日期
数据类型(仅
日期
-
日期时间
!),那么您确实也可以使用
YYYY-MM-DD
格式,这也适用于SQL Server中的任何设置

不要问我为什么这个话题如此棘手,有些令人困惑——事实就是这样。但是使用
YYYYMMDD
格式,您应该可以使用任何版本的SQL Server以及SQL Server中的任何语言和日期格式设置

对于SQL Server 2008及更新版本,如果只需要日期部分,建议使用
DATE
;如果同时需要日期和时间,建议使用
DATETIME2(n)
。如果可能的话,您应该尝试逐步淘汰
DATETIME
数据类型

因此,在您的具体案例中,如果您运行此查询会怎么样:


您是否获得了预期的结果?

您在SQL SERVER中的日期格式是“YYYY-DD-MM”
,这就是为什么会出现转换错误。要进行搜索,您必须使用此精确格式提供日期

但在得到结果的情况下,您可以使用SQL日期格式并以任何格式检索日期,例如

选择日期格式(users.register\u DATE,%Y-%d-%m)作为来自用户的日期


结果将是:2015-17-03

你的问题有点让人困惑。您是否在询问如何让sql返回日期时间值?这叫做格式化,应该在前端完成。你的
register\u date
列的数据类型是什么?register\u date是一个日期列,没有时间。在测试了你发布的查询(使用
YYYYMMDD
格式)后,@marc\s,一个很棒的答案,查询在SQL Server 2008和MySql 5上运行得非常好。非常感谢。