【问题标题】:Format date of filters and results on SQL Server在 SQL Server 上格式化筛选器和结果的日期
【发布时间】:2015-03-18 13:57:26
【问题描述】:

我的查询日期格式有问题。

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

select *
from users
where register_date >= '2015-03-17'

它抛出了一个转换错误。

但如果我执行以下查询:

select *
from users
where register_date >= '2015-17-03'

它返回了正确的数据,但是当我看到 register_date 列时,它给我的日期是 'YYYY-MM-DD' 格式...所以有点令人困惑...

如何将 SQL Server 配置为始终使用“YYYY-MM-DD”格式的过滤器和结果?

【问题讨论】:

  • 你的问题有点混乱。您是否在询问如何让 sql 返回您的日期时间值?这称为格式化,应该在前端完成。
  • register_date 列的数据类型是什么?
  • register_date 是日期列,没有时间。

标签: sql-server date


【解决方案1】:

SQL Server 不会以任何字符串格式存储 DateTime - 它存储为 8 字节数值。

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

SQL Server 支持多种格式 - 请参阅MSDN Books Online on CAST and CONVERT。这些格式中的大多数取决于您拥有的设置 - 因此,这些设置有时可能有效 - 有时无效。

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

SQL Server 支持的ISO-8601 format 有两种形式:

  • YYYYMMDD 仅用于日期(无时间部分);请注意:没有破折号!,这非常重要! YYYY-MM-DD独立于 SQL Server 中的日期格式设置,并且适用于所有情况!

或:

  • YYYY-MM-DDTHH:MM:SS 用于日期和时间 - 请注意:此格式破折号(但它们可以省略),以及固定的T作为日期和时间之间的分隔符DATETIME 的一部分。

这对 SQL Server 2000 和更高版本有效。

如果您使用 SQL Server 2008 或更新版本以及 DATE 数据类型(仅限 DATE - 不是 DATETIME!),那么您确实也可以使用YYYY-MM-DD 格式,并且也适用于 SQL Server 中的任何设置。

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

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

所以在你的具体情况下 - 如果你运行 this 查询会怎样:

select *
from users
where register_date >= '20150317'

你得到了预期的结果吗?

【讨论】:

  • 一个很棒的答案@marc_s,在测试了您发布的查询(使用YYYYMMDD 格式)后,查询在 SQL Server 2008 和 MySql 5 上运行良好。谢谢。
【解决方案2】:

您在 SQL SERVER 中的日期格式是 'YYYY-DD-MM',这就是您收到转换错误的原因。要进行搜索,您必须以这种确切的格式给出日期。

但如果得到结果,您可以使用 SQL DATE FORMAT 并以任何格式检索日期,例如

SELECT DATE_FORMAT(users.register_date ,'%Y-%d-%m') AS date FROM users

结果将是:2015-17-03

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-11
    • 1970-01-01
    • 2020-06-29
    相关资源
    最近更新 更多